Я перепробовал все предыдущие решения, такие как syncdb, migrate, makemigrations et c. Я все еще не заставляю программу работать.
My models.py
class Role(models.Model):
ROLE_CHOICES = (
(1,'ADMIN'),
(2,'HR'),
(3,'MGR'),
(4,'EMP'),
)
id = models.PositiveSmallIntegerField(choices=ROLE_CHOICES,primary_key=True)
def ___str___ (self):
return self.get_id_display()
class User(AbstractUser):
roles = models.ManyToManyField(Role)
class Admins(models.Model):
user = models.PositiveSmallIntegerField(choices=Role.ROLE_CHOICES)
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
class HRs(models.Model):
user = models.PositiveSmallIntegerField(choices=Role.ROLE_CHOICES)
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
Тогда вот мои views.py
class AdminSignUpView(CreateView):
model = User
form_class = AdminSignUpForm
template_name = 'form1/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'ADMIN'
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/form1/forms/')
class HRSignUpView(CreateView):
model = User
form_class = HRSignUpForm
template_name = 'form1/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'HR'
return super().get_context_data(**kwargs)
def form_valid(self,form):
user = form.save()
login(self.request, user)
return redirect('/form1/forms')
Вот мои forms.py
class AdminSignUpForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
fname = forms.CharField(max_length=256)
lname = forms.CharField(max_length=256)
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.roles = 1
user.save()
admin1 = Admins.objects.create(user=user)
admin1.first_name.add(*self.cleaned_data.get('fname'))
admin1.last_name.add(*self.cleaned_data.get('lname'))
return user
class HRSignUpForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic()
def save(self, commit=True):
user = super().save(commit=False)
user.roles = 2
user.save()
hr1 = HRs.objects.create(user=user)
hr1.first_name.add(*self.cleaned_data.get('fname'))
hr1.last_name.add(*self.cleaned_data.get('lname'))
return user
Наконец, вот моя ошибка -
OperationalError at /accounts/signup/hr/
no such table: form1_user
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/signup/hr/
Django Version: 3.0.5
Exception Type: OperationalError
Exception Value:
no such table: form1_user
Она даже не показывает мне, где моя ошибка в моем коде, что делает действительно трудным исправить мою проблему. Потратил часы на inte rnet, пытаясь найти решение, и ничего не работает.