如何创建Django模型字段来存储与模型相关的用户?

时间:2017-03-02 14:07:50

标签: python django django-models

我正在使用django框架在python中构建一个Web应用程序。在我的应用程序中,用户需要能够申请工作。

我不确定如何将已在作业模型中申请作业的用户列表保存为字段。

这是我的Job.py模型:

class Job(models.Model):
    user = models.ForeignKey(User, related_name="jobs")
    created_at = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=30)
    description = models.TextField()
    pay = models.FloatField()
    category = models.CharField(max_length=3, choices=JOB_CATEGORY_CHOICES)
    #applicants = 

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('jobs:detail', kwargs={
            'job_pk': self.id
            }
        )

我需要让申请人字段(目前已注释掉)来存储申请该职位的用户。我该怎么做?

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,我认为您需要将您的模型设置为:

DELETE

这会创建从PATCHclass Job(models.Model): created_at = models.DateTimeField(auto_now_add=True) title = models.CharField(max_length=30) description = models.TextField() pay = models.FloatField() category = models.CharField(max_length=3, choices=JOB_CATEGORY_CHOICES) def __str__(self): return self.title def get_absolute_url(self): return reverse('jobs:detail', kwargs={ 'job_pk': self.id } ) class Applicant(models.Model): job = models.ForeignKey(Job, related_name="applicants") user = models.ForeignKey(User) 的一对多关系,然后是从JobApplicant的一对多关系。

答案 1 :(得分:1)

假设用户可以申请许多工作并且工作可以有很多用户申请,那么简单的解决方案就是多对多关系,由ManyToManyField定义:

class Job(models.Model):
    users = models.ManyToManyField(User)

现在您可能想要跟踪有关应用程序的其他信息(日期等),在这种情况下,显式中间模型可能很方便:

class Application(models.Model):
    job = models.ForeignKey(Job)
    user = models.ForeignKey(User)
    date ⁼ models.DateTimeField(...)
    # etc

   class Meta:
       # you probably don't want the same user 
       # to apply twice to the same job
       unique_together = [("job", "user"),]

答案 2 :(得分:0)

正如manatuf所说,其他具有外键和一对一关系的模型可以解决问题。

我建议你先做Django 101 polls tutorial - 它有很好的解释,并且与你想要构建的相关模型架构非常相似。

玩得开心!