NOT NULL 约束失败 Django CreateView

2024-01-15

我想在这个项目上实现两个目标。首先,我想将登录用户保存为审阅者。其次,我想将外键中的律师值传递到审核表单中。 (这样,用户可以点击律师详细信息页面上的审查链接进行审查,并审查该律师而不是其他人。)

我一直在实现第一个目标,但出现了这个错误。

error

IntegrityError at /lawyers/karlyn-rosemarie-hylton/review/
NOT NULL constraint failed: lawyers_review.reviewer_id

有人可以解释一下我做错了什么以及如何解决它吗?

第二个目标似乎与第一个目标非常相关。我没有收到任何错误。但我想确保我做得正确。然而,在我通过第一个错误之前我无法判断。

非常感谢任何摆脱困境的帮助。

模型.py

from django.db import models
from django.urls import reverse
from django.template.defaultfilters import slugify
from django.contrib.auth.models import User


class Lawyer(models.Model):
    name = models.CharField(max_length=55,
                            default='')
    picture = models.ImageField(upload_to='media/lawyers/pictures', 
                                default='')
    slug = models.SlugField()

    def average_rating(self):
        all_ratings = map(lambda x: x.rating, self.review_set.all())
        return np.mean(all_ratings)

    def save(self, *args, **kwargs):
        self.slug = (slugify(self.name))
        super(Lawyer, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('lawyers:detail', kwargs={'slug': self.slug})

    def __str__(self):
        return self.name 


class Review(models.Model):
    RATING_CHOICES = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
        (5, '5'),
    )
    lawyer = models.ForeignKey(Lawyer, 
                                null=True)
    created = models.DateTimeField(auto_now_add=True)
    reviewer = models.ForeignKey(User)
    title = models.CharField(max_length=55,
                                default='')
    comment = models.TextField()
    rating = models.IntegerField(choices=RATING_CHOICES)

    def __str__(self):
        return self.lawyer.name

views.py

from django.shortcuts import render, get_object_or_404
from django.views.generic import (CreateView,
                                    DetailView,
                                    ListView)


from django.contrib.auth.models import User


from .models import Lawyer, Review


class AddLawyerView(CreateView):
    model = Lawyer 
    fields = ['name', 'picture']

    def post_valid(self, form):
        lawyer = form.save(Commit=False)
        lawyer.picture = form.cleaned_data['picture']
        return super(AddLawyerView, self).form_valid(form)


class LawyerDetail(DetailView):
    model = Lawyer 


class LawyerList(ListView):
    model = Lawyer 


class AddReviewView(CreateView):
    model = Review 
    fields = ['rating', 'title', 'comment']

    def post_valid(self, form):
        review = form.save(Commit=False)
        review.lawyer = get_object_or_404(Lawyer, 
                                            slug=self.kwargs.get('slug'))
        review.reviewer = User.objects.get(user=self.request.user)
        return super(AddReview, self).form_valid(form)

urls.py

from django.conf.urls import url


from .views import (AddLawyerView, 
                    LawyerDetail,
                    LawyerList,
                    AddReviewView)


urlpatterns = [
    url(r'^add-lawyer',
        AddLawyerView.as_view(),
        name = 'add-lawyer'),


    url(r'^(?P<slug>[\w-]+)/$',
        LawyerDetail.as_view(),
        name = 'detail'),


    url(r'^$',
        LawyerList.as_view(),
        name = 'list'),


    url(r'^(?P<slug>[\w-]+)/review/$',
        AddReviewView.as_view(),
        name = 'add-review'),
]

根据@Alasdair 和@Sachin Kukreja 的反馈,我回去做了一些修正。我将“Commit”更改为“commit”,将“post_valid”更改为“form_valid”。我还做了一个小调整来简化视图。更正后的工作 AddReviewView 如下。有错误的就是上面的。

谢谢你们!

工作视图:

class AddReviewView(CreateView):
    model = Review 
    fields = ['rating', 'title', 'comment']

    def form_valid(self, form):
        review = form.save(commit=False)
        review.lawyer = get_object_or_404(Lawyer, 
                                            slug=self.kwargs.get('slug'))
        review.reviewer = self.request.user
        return super(AddReviewView, self).form_valid(form)

你那里有错字,你是压倒一切的form_valid但你已经写了post_valid.

def form_valid(self, form):
    review = form.save(Commit=False)
    review.lawyer = get_object_or_404(Lawyer, 
                                        slug=self.kwargs.get('slug'))
    review.reviewer = User.objects.get(user=self.request.user)

    # save and return HttpResponse
    review.save()
    return HttpResponseRedirect(self.get_success_url())

但是,supercall 仍会调用父类'form_valid这仍然会引发错误。我认为您可以在此重写方法中保存评论并返回基类返回的内容,即return HttpResponseRedirect(self.get_success_url())

Ref: FormMixin 类中的 form_valid https://github.com/django/django/blob/master/django/views/generic/edit.py#L55, ModelFormMixin 类中的 form_valid https://github.com/django/django/blob/master/django/views/generic/edit.py#L123

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NOT NULL 约束失败 Django CreateView 的相关文章

随机推荐

  • 如何在没有应用程序默认凭据或 Cloud SDK 的情况下对 Google Cloud API 进行身份验证?

    我正在尝试从 AWS Lambda 函数访问 Google Cloud API 但我不知道如何进行身份验证 Google Cloud 文档中的身份验证指南 https cloud google com docs authentication
  • 加快excel格式化vba代码的速度?

    我正在使用以下 vba 代码将文本字符串日期更改为 Excel 中的实际日期 以便我可以将其用于逻辑比较等 问题是我需要这个来处理大约 4000 行并每周更新一次 而且这个代码非常慢 Sub Datechange Dim c As Rang
  • Spring Data Elasticsearch 批量索引/删除 - 数百万条记录

    我正在使用 Spring Data Elasticsearch 4 2 5 我们有一项工作对特定的数据库表执行 ETL 提取 转换和加载数据 我在作业运行时使用 Elasticsearch 为这些数据建立索引 数据将达到数百万条甚至更多 目
  • html 5 可以提供实时媒体流吗?

    我听说过 html 5 有很多有趣的功能 但它能够提供来自网络摄像头的实时媒体流吗 本身不是 html5 但 html5 视频可以读取流 例如 YouTube 上的实时流媒体 通过 HTML5 中的 RTSP 或 RTP 进行流式传输 ht
  • 在 Coldfusion 中使用 Apache Cassandra

    我正在尝试在使用 Coldfusion 编码的项目中使用 Apache Cassandra 由于 Coldfusion 没有适用于 Apache Cassandra 的驱动程序 反之亦然 因此我尝试使用 Cassandra 的 Java 驱
  • 如何从反应本机代码转到特定的本机视图控制器?

    我是反应原生的新手 我正在将 React Native 中的一项功能添加到现有的 Swift 应用程序中 我提出了RCTRootview来自我的本机视图控制器 从那里 当用户单击后退按钮时 我必须转到用 swift 编写的主页 如何从反应本
  • 如何在 Web 应用程序中管理时区?

    我不想在我的网络应用程序中管理用户的不同时区 但我不知道从哪里开始 我必须在数据库中保存每个用户的本地时间 或者可能将其转换为 UTC 时间 保存 然后再次进行转换以显示它 或者还有其他方法吗 例如 如果我的一个用户在他的当地时间进行预约
  • ImageSourceConverter 抛出 NullReferenceException ...为什么?

    在过去一个小时左右的时间里 我一直在为这个问题绞尽脑汁 我有一些代码是这样的 videoTile Icon new ImageSourceConverter ConvertFrom coDrivr4 Properties Resources
  • 将 SuperCsv 与多个变量列结合使用

    我正在查看 Super CSV 中的这个示例website http supercsv sourceforge net examples reading variable cols html这表明 dateofbirth 是可选列 如果我有
  • 如何让 Jupyter / IPython Notebook nbconvert 输出不会溢出页面的 PDF?

    当我通过以下方式将 Jupyter IPython Notebook 转换为 PDF 时ipython nbconvert my notebook ipynb to PDF 它大部分看起来都不错 除了一些长行和所有输出只是超出页面边缘 没有
  • Android @Override 用法[重复]

    这个问题在这里已经有答案了 Java 新手 C 老手 我注意到很多使用 Override在 Android 示例代码中 我认为所有 Java 方法默认都是 虚拟 的 然后做什么 Override do 例子 private class He
  • 绝对位置+滚动

    与以下HTML and CSS container position relative border solid 1px red height 256px width 256px overflow auto full height posi
  • 如何将 InMemoryUploadedFile 的内容转换为字符串

    有谁知道如何转换上传文件的内容 InMemoryUploadedFile 在 Django2 中转换为字符串 我想知道下面的内容怎么写convert2string uploaded file request FILES file my xm
  • 无法在 Mac OSX 上安装 PG gem

    我创建了一个新的 Rails 应用程序 rails new d postgresql 但是 我无法安装 pg gem 我之前使用brew安装了postgres 它会随着我的Mac自动启动 我已经尝试过在此处发布的几件事 我正在使用红宝石2
  • 如何生成具有泊松分布的离散随机事件?

    我知道 Knuth 的生成随机泊松分布数的算法 下面在 Java 中 但是我如何将其转换为调用方法 generateEvent 随时间随机 int poissonRandomNumber int lambda double L Math e
  • Python IDLE 无法在 Windows 7 上启动

    我曾经使用Python 2 7 然后IDLE就可以工作了 我卸载了它并安装了Python 3 1 现在 Idle 无法启动 我应该做什么才能让它运行 笔记 我尝试了 c Python31 pythonw exe c Python31 Lib
  • PHP DOM 中无效 XML/HTML 的问题

    假设您有以下 HTML 你想将它加载到 PHP DOMDocument 对象中 你应该怎么做 如果你使用 doc gt loadHTML 就会出现这样的问题 div 是在里面 div
  • Python-创建表

    我是一个处于早期阶段的Python用户 我有 1850 年至 2010 年特定地点的两个温度数据集 整个期间每个月都有一个温度值 我正在尝试使用以下给定格式的这些值创建一个表 T是我的数据 year data JAn FEB MAR APR
  • 使用存储库模式时的 MongoDB 和大型数据集

    好的 在工作中我们正在使用 MVC C 和 MongoDB 开发一个系统 当第一次开发时 我们决定遵循存储库模式可能是一个好主意 真是太痛苦了 下面的代码可以让您了解当前实现的内容 MongoRepository 类 public clas
  • NOT NULL 约束失败 Django CreateView

    我想在这个项目上实现两个目标 首先 我想将登录用户保存为审阅者 其次 我想将外键中的律师值传递到审核表单中 这样 用户可以点击律师详细信息页面上的审查链接进行审查 并审查该律师而不是其他人 我一直在实现第一个目标 但出现了这个错误 erro