Django models Django m2m&x27;通过';使用通用外键
我有下面的代码示例,这是我正在从事的一个现实世界项目的简化抽象:Django models Django m2m&x27;通过';使用通用外键,django-models,Django Models,我有下面的代码示例,这是我正在从事的一个现实世界项目的简化抽象: from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic class FeatureSet(models.Model): """ Feature Set """ name = model
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class FeatureSet(models.Model):
"""
Feature Set
"""
name = models.CharField(max_length=255)
def __unicode__(self):
return u"%s" % self.name
class GenericObjectAlpha(models.Model):
title = models.CharField(max_length=255)
feature_sets = models.ManyToManyField(FeatureSet, through='Feature')
def __unicode__(self):
return u"%s" % self.title
class GenericObjectBeta(models.Model):
title = models.CharField(max_length=255)
feature_sets = models.ManyToManyField(FeatureSet, through='Feature')
def __unicode__(self):
return u"%s" % self.title
class Feature(models.Model):
"""
Feature
"""
# FK to feature set
feature_set = models.ForeignKey(FeatureSet)
# FK to generic object, Generic object alpha or beta... or others
content_type = models.ForeignKey(
ContentType,
default='article',
limit_choices_to={ 'model__in': ('genericobjectalpha', 'genericobjectbeta') },
related_name="play__feature_set__feature")
object_id = models.PositiveIntegerField(
"Feature object lookup")
content_object = generic.GenericForeignKey(
'content_type',
'object_id')
# Extra fields on a m2m relationship
active = models.BooleanField()
order = models.PositiveIntegerField()
def __unicode__(self):
return u"%s::%s" % (self.feature_set, self.content_object)
此行导致错误:
feature_sets = models.ManyToManyField(FeatureSet, through='Feature')
显然,因为“直通”模型缺少与m2m每侧对应的FK。我想在这里实现的是,m2m关系的一面是通用的,并且,我可以指定自己的中间连接表,以执行通常添加的自定义字段等
我有什么选择来实现这一点
注意,在通用模型中包含feature\u set=models.ManyToManyField(FeatureSet,through='feature')
行是当前的一项重要要求,主要用于管理UI目的。其通用性的原因是它尚未确定这条线将放置在多少个模型上