具有多对多属性的RelatedObjectDoesNotExist

时间:2016-02-12 13:11:41

标签: python django django-models

我正在创建一个工作板,当您创建工作时,您可以选择一项或多项与工作挂钩的技能。工作模型如下所示:

class Job(models.Model):
    def __unicode__(self):
        return unicode(self.date_posted)

    title = models.CharField(max_length=256)
    description = models.TextField()
    payment = models.IntegerField()
    skills = models.ForeignKey(Skill)
    location = models.CharField(max_length=128)
    university = models.ManyToManyField(University, blank=True)
    client = models.ForeignKey(Client)
    freelancers_applied = models.ManyToManyField(Freelancer, blank=True, related_name="%(class)s_freelancers_applied")
    freelancer_accepted = models.ForeignKey(Freelancer, blank=True, null=True,
                                            related_name="%(class)s_freelancer_accepted")
    completed = models.BooleanField(default=False)
    date_posted = models.DateField(default=django.utils.timezone.now())
    closing_date = models.DateField(blank=True, null=True)
    active = models.BooleanField(default=True)

并且技能模型看起来像这样:

class Skill(models.Model):
    skill = models.TextField(primary_key=True, max_length=128)

当表单发布时,我从request.POST获得技能,从数据库中检索它们代表的技能,并尝试逐个对象地将它们添加到新模型中:

data = request.POST
j = Job()
skills = Skill.objects.filter(skill__in=data.getlist('skills'))
for skill in skills:
    j.skills.add(skill)

当它尝试执行第j.skills.add(skill)行时,它失败并显示错误

RelatedObjectDoesNotExist at /jobs/post-job/
Job has no skills.

我想我可能要在尝试之前保存对象,但我不能违反非空约束。错误也有点模糊,所以我的搜索进展不顺利。我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

<强> EDITED

我认为这个问题与这个概念有关。

似乎Job可能有多个Skill相关。 Skill可以与多个Jobs相关联吗?如果是,那么您必须将其声明为ManyToManyField而不是ForeignKey。否则,Job必须是ForeignKey中的Skill而不是相反。