Как сделать регистрацию в django с моделью один-к-одному?
Мне удалось зарегистрироваться в качестве участника с этим кодом, но данные не включены в отдел профиля.
мой код ниже (отредактировано в 8:53 утра)
модель
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=100)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
view
def register(request):
if request.method == 'POST':
user_form = UserForm(request.POST)
profile_form = ProfileForm(request.POST)
print(user_form)
print(profile_form)
print("에혀")
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save(commit=False)
profile = profile_form.save(commit=False)
profile.user = user
profile.user.set_password(user_form.cleaned_data['password'])
user.save()
print(request)
return render(request, 'index.html', {'new_user':user})
else:
user_form = UserForm()
profile_form = ProfileForm()
return render(request, 'register.html', {'form':user_form})
form
class UserForm(forms.ModelForm):
password = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Repeat Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'email']
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['department']
urls.py
urlpatterns = [
path('',
IndexView.as_view(),
name='index'),
path('register/', views.register,
name='register'),
....
шаблон
{% extends "base.html" %}
<div class="container my-3">
<form method="post" action="">
{% csrf_token %}
<div class="mb-3">
<label for="username">ID</label>
<input type="text" class="form-control" name="username" id="username"
value="{{ form.username.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="password">PASSWORD</label>
<input type="password" class="form-control" name="password" id="password"
value="{{ form.password.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="password2">PASSWORD_CONFIRM</label>
<input type="password" class="form-control" name="password2" id="password2"
value="{{ form.password2.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="email">EMAIL</label>
<input type="text" class="form-control" name="email" id="email"
value="{{ form.email.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="email">DEPARTMENT</label>
<input type="text" class="form-control" name="department" id="department"
value="{{ form.department.value|default_if_none:'' }}">
</div>
<button type="submit" class="btn">REGISTER!(SIGN UP!)</button>
</form>
</div>
что мне делать? Неважно, что я делаю,
значение отдела не попадает в базу данных профиля.
Кнопка Register существует в файле base.html
У меня ушло три дня, но я не смог найти выход.
правильно ли это, что я создал модель или представление? Я все еще в замешательстве, потому что я не понимаю про instance.Однако, это ситуация, когда нам нужно реализовать членство.
Мне удалось зарегистрироваться в качестве участника с этим кодом, но данные не включены в отдел профиля.
Вы не сохраняете обе формы в файле views.py