首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntegrityError NULL约束失败: accounts_solution.puzzle_id

IntegrityError NULL约束失败: accounts_solution.puzzle_id
EN

Stack Overflow用户
提问于 2018-03-16 09:32:48
回答 1查看 32关注 0票数 1

因此,我正在创建一个令人费解的应用程序,在那里,您可以提交解决方案的拼图,并添加评论的解决方案。

以下是我的模特:

代码语言:javascript
复制
class Solution(models.Model):
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
    )
    puzzle = models.ForeignKey(
        Puzzle,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=30)
    content = models.TextField()
    points = models.IntegerField()
    datetime = models.DateTimeField(default=timezone.now, blank=True)

    def __str__(self):
        return self.title

class Comment(models.Model):
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
    )
    solution = models.ForeignKey(
        Solution,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=30)
    content = models.TextField()
    datetime = models.DateTimeField(default=timezone.now, blank=True)

    def __str__(self):
        return self.title

我正在尝试使用标准Django表单来实现Add注释特性。以下是我的看法:

代码语言:javascript
复制
if request.method == "POST":
        # Add Comment feature
        form = AddCommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.user = request.user
            comment.solution = Solution.objects.get(id=solutionID)
            ## Debugging ##
            print(comment.title)
            print(comment.content)
            print('Solution:')
            print(comment.solution)
            print('Puzzle: ')
            print(comment.solution.puzzle)
            print(comment.solution.puzzle.id)
            ###############
            comment.save()    
            messages.success(request, 'Solution was created successfully!')
            return HttpResponseRedirect(reverse("solutions", kwargs={'puzzleID': puzzleID}))
        else:
            messages.warning(request, 'There are some errors on the form.')
            return render(request, "add_solution.html", {
                "form": form,
            })

当然还有我的表格:

代码语言:javascript
复制
class AddCommentForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(AddCommentForm, self).__init__(*args, **kwargs)
        self.fields['title'].widget.attrs['placeholder'] = 'Title'
        self.fields['content'].widget.attrs['placeholder'] = 'Content'

    title = forms.CharField()
    content = forms.CharField(
        widget = forms.Textarea(attrs={"rows": 6,}),
    )

    class Meta:
        model = Solution
        fields = ['title', 'content']

当我尝试使用这个特性时,Django给出了上面提到的错误。我对这个错误的理解是Django认为我没有为这个评论提供一个有效的解决方案。但是,您会注意到,我在视图中使用了print语句,以确保我传递的是有效值,因此我知道我正在传递一个有效的解决方案,该解决方案链接到一个有效的难题。

因此,我似乎无法理解错误信息。谁来帮帮忙!

谢谢您:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 09:38:40

尽管您已经调用了表单AddCommentForm,但它实际上将其模型声明为解决方案,而不是在Meta类中进行注释。因此,Django认为您正在尝试创建一个新的解决方案,这需要一个难题。

我认为这是一个错误,你打算在那里使用评论。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49317271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档