0

好的,所以这对其他人来说可能真的很容易解决,但我真的很困惑如何解决这个问题。

因此,首先,我有一个模型 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 个):

  1. field1Collection 对象 3
  2. field2Collection 对象 6
  3. field1Collection 对象 2

所以我基本上希望能够从我的 field1Collection 和 field2Collection 表中选择对象并为其分配排名。我尝试使用外键和 m2m 字段来思考方案,但它们都出错了,因为模型需要“提前”知道我需要引用哪个集合集。这很多有意义吗?谁能帮忙?

4

2 回答 2

0

您需要 field1Collection 和 filed2Collection 有一个共同的祖先类,您可以使用foreignKey 来引用它。请参阅有关继承的 django 文档。

于 2013-01-20T00:04:50.123 回答
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应用程序提供了一个特殊的字段类型,它可以解决这个问题并允许关系与任何模型

于 2013-01-20T08:05:03.973 回答