【问题标题】:Django self referencing many-to-many modelDjango自引用多对多模型
【发布时间】: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)

最好的方法是什么?

谢谢

【问题讨论】:

    标签: django recursion django-models many-to-many django-orm


    【解决方案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 the User model section of the documentation。

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2015-01-08
      • 2018-12-17
      • 2021-10-20
      • 2016-07-17
      • 2019-09-15
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多