Не удалось зарегистрироваться, используя представление на основе классов. - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу работать с моделью компании, где я должен зарегистрироваться, используя поддомен, и должен войти в систему, используя то же доменное имя.

Я создал модель, используя следующие поля:

models.py

class Company(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=2000)
    sub_domain = models.CharField(max_length=30)
    user_limit = models.IntegerField(default=5)
    country = models.CharField(max_length=3, choices=COUNTRIES, blank=True, null=True)

И моя регистрационная форма похожа на что-то ниже:

forms.py

class RegistrationForm(forms.ModelForm):
    class Meta:
        model = Company
        fields = ['name', 'address',
                  'sub_domain', 'country']

    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs = {"class": "form-control"}

Но когда дело касается представлений, я не знаю, как обращаться с классами на основе просмотров и, как я новичок ie сталкивается с проблемой сохранения данных в БД.

views.py

class RegistrationView(CreateView):
    model = Company
    form_class = RegistrationForm
    template_name = "company_register.html"

    def is_valid(self, form):
        company = Company.objects.create_company(form.cleaned_data['name'],
                                                 form.cleaned_data['address'],
                                                 form.cleaned_data['sub_domain'],
                                                 form.cleaned_data['country'])
        company.save()
        return super(RegistrationView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(RegistrationView, self).get_context_data(**kwargs)

Пожалуйста, кто-нибудь, помогите !!!

1 Ответ

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

Чтобы полностью понять, что происходит, мы также должны увидеть, что делает метод create_company.

Кроме этого, CreateView использует метод form_valid, а не is_valid. Я действительно метод из формы, а не вид. Это будет примерно так:

class RegistrationView(CreateView):
    model = Company
    form_class = RegistrationForm
    template_name = "company_register.html"

    def form_valid(self, form):
        company = form.save()
        subdomain = form.cleaned_data['sub_domain']
        return HttpResponseRedirect(USE_subdomain_IN_YOUR_URL_HERE)

Вместо вызова super, поскольку метод form_valid уже имеет доступ к поддомену, вызовите HttpResponseRedirect для перенаправления туда.

Что я не понял, так это часть входа в систему, поскольку модель вашей компании, похоже, не расширяет модель пользователя.

...