Django sqlite3中的FOREIGN KEY约束失败错误

时间:2019-04-15 14:35:16

标签: python django sqlite

我正在创建状态模型的脚本上工作。用户可以创建新状态。我已经检查了其他答案,但是它们似乎都是特定于代码的。

这是models.py

class wall_status(models.Model):
    status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name="custom_student_status",
        default=1, 
        on_delete=models.CASCADE)
    new_status = models.CharField(max_length=2000, default='')

这是forms.py

class statusForm(forms.ModelForm):
    new_status = forms.CharField( widget=forms.Textarea)
    class Meta:
        model = wall_status
        fields = ('new_status', )

这是我的views.py

def add_status(request):
    if request.method == "POST":
        form = statusForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            return redirect('wall')
    else:
        form = statusForm()
    btn = 'Add'
    title = 'Interests'
    return render(request, 'user/profile_info_update.html', {'form': form, 'btn': btn, 
                                                                'title': title})

这是模板:

{% block content %}
          <h2>Sign up</h2>
         <form method="post" enctype="multipart/form-data">
              {% csrf_token %}
              {{ form.as_p }}
              <button type="submit">{{ btn }}</button>
            </form>
        {% endblock %}

现在,这里更加令人困惑的是,我能够成功地将记录添加到数据库中5次,然后它开始显示错误。如果我手动删除一条记录,然后再次从runserver添加,它可以工作,但是表中的记录数一旦为5,我就会收到错误消息。有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

保存模型所需的表单时,您缺少状态字段

尝试:

status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
        blank=True, null=True
    )

答案 1 :(得分:0)

好的,所以如果有人请我解释我还是不明白。 所以这是解决我的问题的方法: 我从models.py中删除了它:

status = models.OneToOneField(
        CustomUser,
        on_delete=models.CASCADE,
        primary_key=True,
    )

然后,当我运行makemigrations时,它要求我为id分配一个默认值(我猜是自动创建的主键)。 然后工作正常。如果有人知道这里发生了什么,请也向我解释。谢谢