Я хочу создать регистрационную форму, которая содержит форму пользователя и форму профиля пользователя
пользователь моей таблицы из Django auth_user, поэтому он будет содержать основной столбец, такой как идентификатор, пользователь, адрес электронной почты, пароль, запущен date, et c
и у меня есть форма профиля пользователя, которая создается из форм .py и модели из model.py здесь, она имеет FK user_id, который подключен к идентификатору в auth_user
проблема в том, что когда я вставляю данные, всегда говорится, что это поле обязательно, хотя я уже вставляю все столбцы
, вот код
forms.py
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control'}))
username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
email = forms.CharField(widget=forms.EmailInput(attrs={'class': 'form-control'}))
class Meta():
model = User
fields = ('username', 'email', 'password')
class UserProfileInfoForm(forms.ModelForm):
ROLE_1 = 'Business Analyst'
ROLE_2 = 'Manager'
ROLE_3 = 'Segment Manager'
ROLE_4 = 'Admin'
ROLE_CHOICES = (
(ROLE_1, u"Business Analyst"),
(ROLE_2, u"Manager"),
(ROLE_3, u"Segment Manager"),
(ROLE_4, u"Admin")
)
role = forms.ChoiceField(choices=ROLE_CHOICES, widget=forms.Select(attrs={'class': 'form-control'}))
description = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control'}))
address = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
phone = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
cell = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}))
def __init__(self, disable_fields=True, *args, **kwargs):
super().__init__(*args, **kwargs)
if disable_fields:
self.fields['role'].disabled = True
models.py
class UserProfileInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
role = models.CharField(max_length=250, blank=True)
description = models.TextField(max_length=250, blank=True)
address = models.CharField(max_length=250, blank=True)
phone = models.CharField(max_length=250, blank=True)
cell = models.CharField(max_length=250, blank=True)
profile_pic = models.ImageField(upload_to='profile_pics', blank=True)
def __str__(self):
return self.user.username
def register(request):
registered = False
if request.method == 'POST':
print("test")
user_form = UserForm(request.POST)
profile_form = UserProfileInfoForm(request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=false)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
registered = True
else:
print(user_form.errors, profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileInfoForm(disable_fields=False)
return render(request, 'register.html',
{'user_form': user_form,
'profile_form': profile_form,
'registered': registered})
html
<section id="main-content">
<section class="wrapper">
<h3><i class="fa fa-angle-right"></i>Register User</h3>
<!-- row -->
<!-- FORM VALIDATION -->
<div class="row mt">
<div class="col-lg-12">
<div class="form-panel">
<div class=" form">
{% load staticfiles %}
{% block body_block %}
{% if registered %}
<h1>Thank you for registering!</h1>
{% else %}
<form class=" form-horizontal style-form" id="commentForm" enctype="multipart/form-data" method="POST" action="">
{% csrf_token %}
{{ user_form.as_p}}
{{ profile_form.as_p }}
<button class="btn btn-theme" type="submit" style="height:50px;width:200px;" value="Register">Register</button>
</form>
{% endif %}
</div>
</div>
{% endblock %}
</div>
</div>
<!-- /form-panel -->
</div>
<!-- /col-lg-12 -->
</div>
<!-- /row -->
</section>
</section>
Может кто-нибудь мне помочь? я уже пытаюсь каким-то образом, например удалить profile_form.isvalid () в условии if, и он переходит к следующему шагу, но это ошибка ORA-01400: cannot insert NULL into ("ICB"."POLLS_USERPROFILEINFO"."USER_ID")
, user_id которой сначала является fk
. Я делаю этот модуль и он работает нормально, но через 1 месяц это ошибки, и я не изменил код