Я использую стандартную модель Django 'User' для создания пользователя.После успешного создания этот пользователь направляется на страницу профиля, где ему предлагается заполнить свой профиль.Профиль или модель Profile
имеет OneToOneField
с User
.При первом сохранении профиль успешен, потому что первая вставка с request.user
, а объект профиля еще не создан.
При последующих попытках изменить эту форму я получаю сообщение об ошибке
return Database.Cursor.execute (self, query, params) sqlite3.IntegrityError: Сбой ограничения NOT NULL: app_profile.user_id Вышеуказанное исключение было прямой причиной следующего исключения:.,return Database.Cursor.execute (self, query, params) 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
view
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})
Что я делаю не такмоя логика?Я думаю, что это должно быть довольно просто иметь дело, но я не могу разобраться с этим.