Python django模型帮助,涉及m2m和foreignkey

Python django模型帮助,涉及m2m和foreignkey,python,database,django,models,django-orm,Python,Database,Django,Models,Django Orm,好吧,这对其他人来说可能真的很容易解决,但我真的很困惑如何解决这个问题 首先,我有一个模型a,它有多个字段,这些字段与特定表有多对多关系。比如说 class A(models.Model): field1 = models.ManyToMany('field1Collection') field2 = models.ManyToMany(field2Collection') class field1Collection(models.Model): descriptio

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

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

  • Field1收集对象3
  • Field2收集对象6
  • Field1收集对象2

  • 因此,我基本上希望能够从field1Collection和field2Collection表中选择对象,并为它们分配等级。我尝试使用ForeignKey和m2m字段构思方案,但它们都出错了,因为模型需要“提前”知道我需要引用哪个集合集。这很有意义吗?有人能帮忙吗?

    您需要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,则必须选择一个且仅选择一个模型来存储标记。应用程序提供了一种特殊的字段类型,该字段类型可以解决此问题,并允许与任何模型建立关系

    您建议采用哪种继承方式?