我正在使用默认的django“用户”模型创建用户。成功创建后,此用户将被定向到一个配置文件页面,在该页面上要求用户填写其配置文件。配置文件,或
Profile
模型有一个
OneToOneField
具有
User
.第一次保存时,配置文件成功,因为第一次插入时
request.user
而且这个配置文件对象还没有被创建。
在以后尝试编辑此表单时,我得到一个错误
返回database.cursor.execute(self、query、params)
sqlite3.integrityerror:非空约束失败:
app_profile.user_id上述异常是
以下异常:。.返回database.cursor.execute(self,query,
params)django.db.utils.integrityerror:非空约束失败:
app_profile.user_id[2018年6月26日06:32:51]“发布/配置文件/http/1.1”
500 162255
这是我的
简况
模型
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
type = models.CharField(choices=(
('content-creator', 'Content Creator'),
('artist', 'Artist'),
), max_length=20)
about = models.CharField(max_length=100, blank=True)
birth_date = models.DateField(null=True, blank=True)
location = models.CharField(max_length=30, blank=True)
youtube = models.URLField(null=True, blank=True)
instagram = models.URLField(null=True, blank=True)
facebook = models.URLField(null=True, blank=True)
twitter = models.URLField(null=True, blank=True)
website = models.URLField(null=True, blank=True)
other = models.TextField(null=True, max_length=100, blank=True)
这里是
简况
看法
class ProfileView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'
form_class = ProfileForm
template_name = 'app/profile.html'
initial = {}
def get(self, request, *args, **kwargs):
profile = Profile.objects.get(user=request.user)
if profile:
form = ProfileForm(instance=profile)
else:
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = ProfileForm(request.POST)
if form.is_valid():
profile_obj = form.save(commit=False)
profile_obj.user = request.user
profile_obj.save()
return render(request, self.template_name, {'form': form})
我的逻辑出了什么问题?我认为这应该是非常直接的处理,但我不能让我的头脑。