Django 两个模型,每个模型都有许多相互引用的字段

Django 两个模型,每个模型都有许多相互引用的字段,django,django-models,Django,Django Models,我希望男性对女性有很多领域,男性也一样。此处出现的问题是,您只能引用在引用模型之前创建的模型: class Male(models.Model): name = models.CharField(null=True,blank=True, max_length=300) age = models.IntegerField(null=True,blank=True) d_O_b = models.DateField(null=True,blank=True) des

我希望男性对女性有很多领域,男性也一样。此处出现的问题是,您只能引用在引用模型之前创建的模型:

class Male(models.Model):
    name = models.CharField(null=True,blank=True, max_length=300)
    age = models.IntegerField(null=True,blank=True)
    d_O_b = models.DateField(null=True,blank=True)
    description = models.CharField(null=True,blank=True, max_length=300)
    #swipes = models.ManyToManyField(Females)

    def __str__(self):
        return self.name

class Female(models.Model):
    name = models.CharField(null=True,blank=True, max_length=300)
    age = models.IntegerField(null=True,blank=True)
    d_O_b = models.DateField(null=True,blank=True)
    description = models.CharField(null=True,blank=True, max_length=300)
    swipes = models.ManyToManyField(Male)

    def __str__(self):
        return self.name

class Male(models.Model):
    _inherit = 'Male'
    swipes = models.ManyToManyField(Female)

您可以使用模型的名称,而不是模型本身(称为“惰性关系”):


文档:

您只需要其中一个型号的M2M。如果您要在model
Female
上注释掉
滑动
,并取消对
Male
上的滑动的注释,那么它会起作用。或者,您可以将
女性
的代码移动到
男性
的上方,这样它将首先声明,并且在不更改字段声明的情况下工作。有关最简单的方法,请参阅下面的答案。
class Male(models.Model):
    name = models.CharField(null=True,blank=True, max_length=300)
    age = models.IntegerField(null=True,blank=True)
    d_O_b = models.DateField(null=True,blank=True)
    description = models.CharField(null=True,blank=True, max_length=300)
    swipes = models.ManyToManyField('Female', related_name="female_swipes")

    def __str__(self):
        return self.name

class Female(models.Model):
    name = models.CharField(null=True,blank=True, max_length=300)
    age = models.IntegerField(null=True,blank=True)
    d_O_b = models.DateField(null=True,blank=True)
    description = models.CharField(null=True,blank=True, max_length=300)
    swipes = models.ManyToManyField(Male, related_name="male_swipes")

    def __str__(self):
        return self.name