我正在创建一个工作板,当您创建工作时,您可以选择一项或多项与工作挂钩的技能。工作模型如下所示:
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.
我想我可能要在尝试之前保存对象,但我不能违反非空约束。错误也有点模糊,所以我的搜索进展不顺利。我怎样才能解决这个问题?
答案 0 :(得分:0)
<强> EDITED 强>
我认为这个问题与这个概念有关。
似乎Job
可能有多个Skill
相关。 Skill
可以与多个Jobs
相关联吗?如果是,那么您必须将其声明为ManyToManyField
而不是ForeignKey
。否则,Job
必须是ForeignKey
中的Skill
而不是相反。