файл models.py:
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models.signals import post_save
from django.dispatch import receiver
class User(AbstractUser):
is_taxpayer = models.BooleanField(default=False)
is_official = models.BooleanField(default=False)
username = models.CharField(max_length=200, unique=True)
email = models.EmailField(max_length=200, unique=True)
class TaxpayerProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='taxpayer_profile')
aadhar = models.DecimalField(max_digits=12, decimal_places=0)
class OfficialProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, related_name='official_profile')
aadhar = models.DecimalField(max_digits=12, decimal_places=0)
uid = models.CharField(max_length=200)
USERNAME_FIELD = 'uid'
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
print('****', created)
if instance.is_taxpayer:
TaxpayerProfile.objects.get_or_create(user = instance)
else:
OfficialProfile.objects.get_or_create(user = instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
print('_-----')
# print(instance.internprofile.bio, instance.internprofile.location)
if instance.is_taxpayer:
instance.taxpayer_profile.save()
else:
OfficialProfile.objects.get_or_create(user = instance)
Вот файл forms.py:
from django import forms
from .models import User, TaxpayerProfile, OfficialProfile
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'email']
class TaxpayerProfileForm(forms.ModelForm):
class Meta:
model = TaxpayerProfile
fields = ['aadhar']
class OfficialProfileForm(forms.ModelForm):
class Meta:
model = OfficialProfile
fields = ['aadhar', 'uid']
Вот файл views.py:
from django.contrib.auth import login
from django.shortcuts import redirect, render
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic import CreateView
from .forms import OfficialProfileForm, TaxpayerProfileForm, UserForm
from .models import User, TaxpayerProfile, OfficialProfile
def taxpayer_profile_view(request):
if request.method == 'POST':
user_form = UserForm(request.POST)
taxpayer_profile_form = TaxpayerProfileForm(request.POST)
if user_form.is_valid() and taxpayer_profile_form.is_valid():
user = user_form.save(commit=False)
user.save()
user.taxpayer_profile.aadhar = taxpayer_profile_form.cleaned_data['aadhar']
user.taxpayer_profile.save()
return HttpResponse('thanks')
else:
user_form = UserForm()
taxpayer_profile_form = TaxpayerProfileForm()
return render(request, 'accounts/taxpayer_profile.html', {'user_form':user_form, 'taxpayer_profile_form':taxpayer_profile_form})
else:
user_form = UserForm()
taxpayer_profile_form = TaxpayerProfileForm()
return render(request, 'accounts/taxpayer_profile.html', {'user_form':user_form, 'taxpayer_profile_form':taxpayer_profile_form})
def official_profile_view(request):
if request.method == 'POST':
user_form = UserForm(request.POST)
official_profile_form = OfficialProfileForm(request.POST)
if user_form.is_valid() and official_profile_form.is_valid():
user = user_form.save(commit=False)
user.save()
user.official_profile.aadhar = official_profile_form.cleaned_data['aadhar']
user.official_profile.uid = official_profile_form.cleaned_data['uid']
user.officialr_profile.save()
return HttpResponseRedirect('/thanks/')
else:
user_form = UserForm()
official_profile_form = OfficialProfileForm()
return render(request, 'official_profile.html', {'user_form':user_form, 'official_profile_form':official_profile_form})
else:
user_form = UserForm()
official_profile_form = OfficialProfileForm()
return render(request, 'officialr_profile.html', {'user_form':user_form, 'official_profile_form':official_profile_form})
Вот форма html для налогоплательщика
<form method="post">
{% csrf_token %}
{{ user_form.as_p }}
{{ taxpayer_profile_form.as_p }}
<button type="submit">Save changes</button>
</form>
Пожалуйста, помогите мне в этом. У меня возникают следующие проблемы:
- Я не могу создать учетную запись администратора, хотя я точно выполнил admin.site.register (Пользователь), он показывает уникальную ошибку для электронной почты
- Когда я ввожу значения в поля формы, создается только объект User, а объект TaxpayerProfile не создается
- Я не могу ни одного объекта класса User по идентификатору. Я провел отладку целый день, но не могу разрешить что угодно.