Django模型帮助,包括m2m和foreignkey

2024-03-28 22:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这对其他人来说可能真的很容易解决,但我真的很困惑如何去解决这个问题。你知道吗

首先,我有一个模型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. Field1收集对象3
  2. field2Collection对象6
  3. Field1收集对象2

所以我基本上希望能够从field1Collection和field2Collection表中选择对象,并为它们分配等级。我尝试使用foreignkeys和m2m字段来设计方案,但它们都会出错,因为模型需要提前知道我需要引用哪个集合集。这有意义吗?有人能帮忙吗?你知道吗


Tags: 对象模型model关系modelsdescriptionclasstextfield
2条回答

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

您可以使用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应用程序提供了一种特殊的字段类型,它可以解决这个问题,并允许与任何模型建立关系

相关问题 更多 >