нет такой таблицы: form1_user - PullRequest
0 голосов
/ 25 апреля 2020

Я перепробовал все предыдущие решения, такие как 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, пытаясь найти решение, и ничего не работает.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Я столкнулся с той же точной ошибкой. Похоже, это не исправить. Что я сделал, так это то, что я скопировал все файлы в этой папке в другую папку, удалил эту папку, создал новый в каталоге моего проекта, а затем вставил все обратно (будьте осторожны с вашим urls.py, не забудьте поменять их). Затем я запустил команды makemigration и migrate, и все заработало!

0 голосов
/ 25 апреля 2020

После создания новых моделей вы создали миграции с помощью makemigrations и применили эти миграции с помощью migrate

...