一对多模型逻辑

时间:2020-05-17 03:28:40

标签: python django django-rest-framework

我需要模型逻辑方面的帮助。我正在尝试重新创建一个包含Candidate实例的应用程序跟踪应用程序。这是我的基本模型结构:

from django.db import models

class Candidate(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):
        return self.name


class Job(models.Model):
    job_title = models.CharField(max_length=128)

    def __str__(self):
        return self.job_title


class Application(models.Model):
    candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
    job = models.ForeignKey(Job, on_delete=models.CASCADE)
    application_date = models.DateField()

    def__str__(self):
        return str(self.job) + ' ' + str(self.candidate)

以下是逻辑参数:

  • 候选人只能有一个实例,但是可以有多个应用程序
  • 每个候选人的申请只能存在于一个工作中

此API视图可能会导致的结果:

# candidate detail
"candidate": {
    # candidate info from model
    "id": 1,
    ...
    "applications": {
        # application 1
        # application 2
    }
}

# application detail
"application": {
    # application info from model
    "id": 1, 
    ... 
    "candidate_id": 1
    "job_id": 1
}

# job detail
"job": {
    # job info from model
    "id": 1, 
    ...
}

让我大吃一惊的是,我如何能够显示每个候选实例中的“应用程序”列表以及它如何与“应用程序”模型相关联。我什至不知道如何在标题中说明(甚至正确),但我的想法是一个候选人可以有很多申请,但每项工作都必须是一个(唯一的候选人)。我真的很感激任何能为我指出正确方向的人。

编辑:此外,如果必须是唯一的,同一候选人将如何提出其他申请?这种模式使我发疯。请帮忙。

1 个答案:

答案 0 :(得分:0)

乍一看-我不确定我是否能正确理解您的问题-您不需要在Job模型中有候选人字段。 我会这样做: 1.像您一样拥有候选模型。 2.有Job模型,没有候选人字段 3.和您一样拥有应用程序模型。

使用此“候选人只能有一个实例,但可以有多个应用程序”的问题来解决。 关于另一个问题“每个候选人的申请只能在一个工作中存在”,我将按照您的看法处理。

希望这会有所帮助。