Как управлять созданием профиля пользователя - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу создать расширенную модель пользователя. Я создал модель профиля с отношением один к одному с моделью пользователя django по умолчанию. Проблема в том, что когда я создаю экземпляр профиля и включаю поле «Пользователь», это вызывает у меня исключение (NOT NULL ограничение: portal_profile.user_id). Почему?

view.py

def register(request):
    if request.method == 'POST':
        user_form= UserCreationForm(request.POST)
        profile_form = ProfileForm(request.POST, request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save(commit=False)
            profile_form.user=user_form
            profile_form.save()

model.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
    img = models.ImageField(null=True, upload_to='userImg')
    country = models.CharField(null=True, max_length=50)
    city = models.CharField(null=True, max_length=50)
    email=models.EmailField(unique=True)

forms.py

 class ProfileForm(ModelForm):
        img=forms.ImageField(required=False)
        class Meta:
            model = Profile
            fields=['img', 'country', 'city', 'email']

register.html

{% if UserForm.errors or  ProfileFrom.errros %}
        <p> Error </p>
{% endif %}


{{ UserForm }}
{{ ProfileForm }}

1 Ответ

0 голосов
/ 05 апреля 2019

Вы путаете экземпляры модели с формами как в случае пользователя, так и в профиле.Должно быть:

user = user_form.save()
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...