好的,这对其他人来说可能很容易解决,但我真的很困惑如何去解决这个问题。
首先,我有一个模型A,它有多个与特定表有多对多关系的字段。例如,
class A(models.Model):
field1 = models.ManyToMany('field1Collection')
field2 = models.ManyToMany(field2Collection')
class field1Collection(models.Model):
description = models.TextField()
class field2Collection(models.Model):
description = models.TextFIeld()
无论如何,这正是我想要完成的。我需要编写另一个可以容纳排名系统的模型。例如,我想创建一个我可以定义的记录
我有x个等级(例如3个):
所以我基本上希望能够从我的field1Collection和field2Collection表中选择对象并为它们分配排名。我尝试使用foreignkeys和m2m字段来思考方案,但它们都出错了,因为模型需要知道“我需要”引用的集合集“超前”。这有多少感觉?有人可以帮忙吗?
答案 0 :(得分:0)
你需要field1Collection和filed2Collection有一个共同的祖先类,你可以用foreignKey引用它。请参阅有关继承的django文档。
答案 1 :(得分:0)
您可以使用GenericForeignKey
关系
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class RankItem(models.Model):
rank = models.IntegerField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.rank
普通的ForeignKey只能“指向”另一个模型,这意味着如果RankItem模型使用了ForeignKey,则必须选择一个且只有一个模型来存储标签。 contenttypes应用程序提供了一种特殊的字段类型,可以解决此问题,并允许关系与任何模型