Python 提交时的完整性错误
我正在创建这个应用程序,在那里我希望能够向管理员数据库报告一部电影。此时,我可以去看电影,然后单击“报告”,然后发送到报告表单模板。但是,当我单击此模板上的“报告”按钮时,我只得到以下信息,数据库中没有任何反应: 异常类型:IntegrityError 异常值:非空约束失败:board_report.reporter_id 有人能解决这个问题吗 报告表单.htmlPython 提交时的完整性错误,python,html,mysql,django,Python,Html,Mysql,Django,我正在创建这个应用程序,在那里我希望能够向管理员数据库报告一部电影。此时,我可以去看电影,然后单击“报告”,然后发送到报告表单模板。但是,当我单击此模板上的“报告”按钮时,我只得到以下信息,数据库中没有任何反应: 异常类型:IntegrityError 异常值:非空约束失败:board_report.reporter_id 有人能解决这个问题吗 报告表单.html {% extends "board/base.html" %} {% load crispy_forms_tags %} {% lo
{% extends "board/base.html" %}
{% load crispy_forms_tags %}
{% load materializecss %}
{% block content %}
<div class="valign-wrapper row login-box">
<div class="col card hoverable s10 pull-s1 m6 pull-m3 l8 pull-l2">
<form method="POST" action="" enctype="multipart/form-data">
{% csrf_token %}
<div class="card-content">
<span class="card-title">Jusity why you want to report this film?</span>
<div class="row">
{{ form|materializecss }}
</div>
</div>
<div class="card-action right-align">
<input type="reset" id="reset" class="btn-flat grey-text waves-effect">
<input type="submit" class="btn green waves-effect waves-light" value="Report">
</div>
</form>
</div>
</div>
{% endblock content %}
视图.py
class Report(models.Model):
reason = models.TextField()
reporter = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Reporter")
reports = models.ForeignKey(Film, on_delete=models.CASCADE)
def __str__(self): # pragma: no cover
return f"{self.reports.title} reported by {self.reporter.username}"
def get_absolute_url(self): # pragma: no cover
return reverse("film-detail", kwargs={"pk": self.pk})
class FilmReport(LoginRequiredMixin, CreateView):
model = Report
fields = ["reason"]
def __str__(self):
return self.title
urlpatterns = [
path("", views.films_view, name="board-home"),
path("film/add", FilmAddView.as_view(), name="film-add"),
path("film/<int:pk>/", FilmDetailView.as_view(), name="film-detail"),
path("film/<int:pk>/report", FilmReport.as_view(), name="film-report"),
]
url.py
class Report(models.Model):
reason = models.TextField()
reporter = models.ForeignKey(User, on_delete=models.CASCADE, related_name="Reporter")
reports = models.ForeignKey(Film, on_delete=models.CASCADE)
def __str__(self): # pragma: no cover
return f"{self.reports.title} reported by {self.reporter.username}"
def get_absolute_url(self): # pragma: no cover
return reverse("film-detail", kwargs={"pk": self.pk})
class FilmReport(LoginRequiredMixin, CreateView):
model = Report
fields = ["reason"]
def __str__(self):
return self.title
urlpatterns = [
path("", views.films_view, name="board-home"),
path("film/add", FilmAddView.as_view(), name="film-add"),
path("film/<int:pk>/", FilmDetailView.as_view(), name="film-detail"),
path("film/<int:pk>/report", FilmReport.as_view(), name="film-report"),
]
urlpatterns=[
路径(“,views.films\u view,name=“board home”),
路径(“film/add”,FilmAddView.as_view(),name=“film add”),
路径(“film//”,FilmDetailView.as_view(),name=“film detail”),
路径(“film//report”,FilmReport.as_view(),name=“film report”),
]
这意味着您没有为reporter
添加值(也没有为报告添加值),因此数据库拒绝创建
您可以通过覆盖form\u valid
方法来设置reporter
和reports
(到URL中的pk
):
class FilmReportView(LoginRequiredMixin, CreateView):
model = Report
fields = ['reason']
def form_valid(self, form):
form.instance.reporter = self.request.user
form.instance.reports_id = self.kwargs['pk']
return super().form_valid(form)
class FilmReportView(LoginRequiredMixin,CreateView):
模型=报告
字段=['reason']
def表单_有效(自身、表单):
form.instance.reporter=self.request.user
form.instance.reports_id=self.kwargs['pk']
return super().form\u有效(form)
为视图实现\uuuu str\uuuu
并不常见。此外,视图没有标题,因此self.title
将不起作用
注意:在Django中,基于类的视图(CBV)通常有视图
后缀,因此您应该
考虑将视图类重命名为<代码> FelMeRePview < /C> >,而不是<代码> FrimReals< /Calp>
这意味着您没有为reporter
(也没有为reports
)添加值,因此数据库拒绝创建
您可以通过覆盖form\u valid
方法来设置reporter
和reports
(到URL中的pk
):
class FilmReportView(LoginRequiredMixin, CreateView):
model = Report
fields = ['reason']
def form_valid(self, form):
form.instance.reporter = self.request.user
form.instance.reports_id = self.kwargs['pk']
return super().form_valid(form)
class FilmReportView(LoginRequiredMixin,CreateView):
模型=报告
字段=['reason']
def表单_有效(自身、表单):
form.instance.reporter=self.request.user
form.instance.reports_id=self.kwargs['pk']
return super().form\u有效(form)
为视图实现\uuuu str\uuuu
并不常见。此外,视图没有标题,因此self.title
将不起作用
注意:在Django中,基于类的视图(CBV)通常有视图
后缀,因此您应该
考虑将视图类重命名为<代码> FelMeRePview < /C> >,而不是<代码> FrimReals< /Calp>
这意味着您没有为<代码>记者<代码>(也没有为<代码>电影<代码>)添加值。这意味着您没有为<代码>记者<代码>(也没有为<代码>电影<代码>)添加值。我实现了您的更改,错误消失了。现在我明白了:“view board.views.FilmReportView没有返回HttpResponse对象。它没有返回任何对象。”@Jonas:对不起,忘记了返回的。但很可能记录已经在数据库中,它只是没有重定向到成功url。只是一个简单的问题。当我报告电影时,我会被重定向到数据库中的下一部电影。这是为什么?@Jonas:因为您没有在视图中定义success\u url
,它将重定向到您创建的对象的get\u absolute\u url
(这里是报告
)。可能包含此url(有点“奇怪”)。有关更多信息,请参阅我实现了您的更改,错误消失了。现在我明白了:“view board.views.FilmReportView没有返回HttpResponse对象。它没有返回任何对象。”@Jonas:对不起,忘记了返回的。但很可能记录已经在数据库中,它只是没有重定向到成功url。只是一个简单的问题。当我报告电影时,我会被重定向到数据库中的下一部电影。这是为什么?@Jonas:因为您没有在视图中定义success\u url
,它将重定向到您创建的对象的get\u absolute\u url
(这里是报告
)。可能包含此url(有点“奇怪”)。有关更多信息,请参阅