如何解决提交表单时,Django非null约束失败
我使用基本的用户模型,我也希望将个人资料也连接到它。但是,当我提交表单时,出现以下错误:NOT NULL约束失败:users_profile.user_id
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,unique=True)
weight = models.FloatField(max_length=20,blank=True,null=True)
height = models.FloatField(max_length=20,null=True)
goal = models.FloatField(max_length=20,null=True)
def __str__(self):
return self.user.username
@receiver(post_save,sender=User)
def create_user_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save,sender=User)
def save_user_profile(sender,**kwargs):
instance.profile.save()
观看次数:
from django.shortcuts import render
from django.contrib import messages
from users import models
from users.models import Profile
from .forms import WeightForm
# Create your views here.
def home(request):
form = WeightForm()
if request.method == 'POST':
form = WeightForm(request.POST)
if form.is_valid:
form.save()
return render(request,'Landing/index.html',{'form': form})
解决方法
问题在于您的“更新”案例在创建案例之前正在运行。而不是使用两个接收器,而使用一个条件为created
的接收器。
@receiver(post_save,sender=User)
def save_user_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user=instance)
else:
instance.profile.save()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。