代码之家  ›  专栏  ›  技术社区  ›  B.obed

非空约束失败:门户\访问请求.访问者\ id

  •  2
  • B.obed  · 技术社区  · 7 年前

    我是django的新手,我已经为这个项目奋斗了一段时间。每次尝试提交表单(最终创建访问者和访问者请求对象)时,我都会收到一个NOTNULL约束错误。错误来自这行代码。。。 访问请求=访问请求(staff=staff,visitor=visitor,comment=comment,token=token,status=None)。保存() ... 请查看下面的代码。

    views.py

    def formpage(request):
        if request.method=='POST':
            token=secrets.token_urlsafe(20)
            visitor_name=request.POST.get('visitorsname')
            comment=request.POST.get('comment')
            visit_type=request.POST.get('visit_type')
            visit_content='You have a waiting visitor'+'\n'+'Name:'+visitor_name+'\n'+'Purpose Of Visit:'+visit_type+'\n'+'Additional Comment:'+comment+'\n'+token
            staff_id=request.POST.get('staff')
            staff=Staff.objects.get(id=staff_id)
            staff_email=staff.staff_email
            req_comment = request.POST.get('req_comment')
            request_id = (request.POST.get('request_id'))
            visitor=Visitor(visitor_name=visitor_name).save()
            visit_request = VisitRequests(staff=staff, visitor=visitor, comment=comment, token=token, status=None).save()
    

    models.py

    class Staff(models.Model):
        staff_name = models.CharField(max_length=250)
        staff_email = models.CharField(max_length=250, default="")
    
        def __str__(self):
            return self.staff_name
    
    class Visitor(models.Model):
        visitor_name = models.CharField(max_length=250)
        timestamp = models.DateTimeField(default=timezone.now)
    
        def __str__(self):
            return '{}'.format(self.visitor_name)
    
    class VisitRequests(models.Model):
        staff=models.ForeignKey(Staff, on_delete=models.CASCADE)
        visitor = models.ForeignKey(Visitor, on_delete=models.CASCADE)
        comment= models.TextField(default='')
        status= models.NullBooleanField()
        token=models.CharField(max_length=20)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Aurora Wang    7 年前

    您的实现假设Django save 返回模型对象,但实际情况并非如此。你可能想读书 Why does django ORM's save method not return the saved object? 以便进一步了解。

    在你的情况下,你可以使用 Django's create 函数创建并获取返回的对象:

    visitor = Visitor.objects.create(visitor_name=visitor_name)
    visit_request = VisitRequests.objects.create(staff=staff, visitor=visitor, comment=comment, token=token, status=None)