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】:您可以在ManyToManyField
的through=…
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 theUser
model section of the documentation。
【讨论】:
以上是关于Django自引用多对多模型的主要内容,如果未能解决你的问题,请参考以下文章