Django自引用多对多模型

Posted

技术标签:

【中文标题】Django自引用多对多模型【英文标题】:Django self referencing many-to-many model 【发布时间】:2021-01-25 00:03:19 【问题描述】: 我有一个简单的 Django Jobs 模型,有两个字段;申请人和申请人选择。

“申请人”与用户模型是多对多关系。 我希望“applicants_selected”与同一模型的申请者字段具有多对多关系

例如:

class Job(models.Model):
       applicants = models.ManyToManyField('User', blank=True)
       selected_applicants = models.ManyToManyField('Self.applicants', blank=True)

最好的方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

您可以在ManyToManyFieldthrough=… model [Django-doc] 中创建一个BooleanField

from django.conf import settings
from django.db import models

class Job(models.Model):
    applicants = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        through='Applicant'
    )

class Applicant(models.Model):
    job = models.ForeignKey(Job, on_delete=models.CASCADE)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    selected = models.BooleanField(default=False)

因此,您可以将selected 字段更改为True,以防候选人被选中。因此,您可以选择被选中的申请人:

myjob.applicants.filter(<b>applicant__selected=True</b>)

注意:通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation。

【讨论】:

以上是关于Django自引用多对多模型的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize 多对多自引用

Django多对多(m2m)与同一模型的关系

Django:通过参数序列化具有多对多关系的模型

如何在书架中建立自引用多对多关系

如何在 django 中处理未保存的多对多关系?

具有多对多关系的Django表单不保存