【发布时间】:2018-12-04 18:40:49
【问题描述】:
我正在使用默认的 Django 'User' 模型来创建用户。成功创建后,此用户将被定向到个人资料页面,要求他们填写个人资料。配置文件或Profile 模型具有OneToOneField 和User。在第一次保存时,配置文件成功,因为第一次插入是使用 request.user 并且尚未创建配置文件对象。
在以后尝试编辑此表单时,我收到一条错误消息,提示
return Database.Cursor.execute(self, query, params) sqlite3.IntegrityError:NOT NULL 约束失败: app_profile.user_id 上述异常是导致 以下异常:. .返回 Database.Cursor.execute(self, query, 参数)django.db.utils.IntegrityError:NOT NULL 约束失败: app_profile.user_id [26/Jun/2018 06:32:51] “POST /profile/ HTTP/1.1” 500 162255
这是我的Profile 模型
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)
这是Profile 视图
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})
我的逻辑有什么问题?我认为这应该很容易处理,但我无法理解它。
【问题讨论】:
标签: django django-models django-forms django-views