验证django unique_together的正确方法

时间:2017-11-15 21:46:58

标签: python django python-3.x django-forms

我搜索过很多关于unique_together的答案,但是找不到合适的东西。我有这样的模特:

class Skill(models.Model):
    user = models.ForeignKey(User, blank = True)
    title = models.CharField()
    ...

    class Meta:
        unique_together = ("user", "title")

并形成如下:

class SkillForm(forms.ModelForm):

class Meta:
    model = Skill
    fields = (
        'title',
        ...
        )

但是现在当我尝试创建具有相同用户和标题的新技能时,我得到了:
IntegrityError at /skill/new/ UNIQUE constraint failed: personal_page_platform_skill.user_id, personal_page_platform_skill.title

我需要一种正确的方法来捕捉这种情况,而不需要用户字段。我不想让用户选择他们创建技能的人。 问题不是空白=用户的真,因为在我的视图中我从请求获得用户。另外get_or_create方法不适合我,我想。

如果需要,我的观点在这里:

@login_required
def skill_new(request):
    if request.method != "POST":
        form = SkillForm()
        return render(request, '...', {'form': form})
    form = SkillForm(request.POST)
    if not form.is_valid():
        return render(request, '...', {'form': form})
    skill = form.save(commit=False)
    skill.user = request.user
    skill.save()
    return redirect('...', username=request.user.username)

0 个答案:

没有答案