Обновление модели пользователя в Django при заполнении формы в другой модели - PullRequest
0 голосов
/ 10 апреля 2020

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

У меня есть пользовательская модель, которая довольно проста c, но включает в себя BooleanField, в котором указано, заполнили ли они форму добровольного равенства и разнообразия. Существует очень базовая модель c, которая содержит данные форм равенства и разнообразия без какой-либо ссылки на пользователей, заполнивших каждый ответ. Что я хочу, так это, когда пользователь заполняет действительную форму равенства и разнообразия, он помещает True в поле пользовательской модели, чтобы сказать, что он заполнил форму.

Я был бы очень признателен, если бы кто-нибудь знал правильное способ сделать это, поскольку я завязываю себя в узлы и запутался.

Вот упрощенная версия кода:

users / models.py

class CustomUser(AbstractUser):
    # Has the user completed the EDI form?
    edi = models.BooleanField(default=False)
    def get_absolute_url(self):
        return reverse('profile', args=[str(self.username)])

равенства_диверсити / models.py

class EqualityDiversity(models.Model):
    age = models.CharField(max_length=8, choices=AGE_CHOICES)
    ethnicity = models.CharField(max_length=64, blank=True, null=True)
    ... (etc)

равенства_диверсити / views.py

class EqualityDiversityView(LoginRequiredMixin, CreateView):
    model = EqualityDiversity
    template_name = 'equality_diversity.html'
    form_class = EqualityDiversityForm
    login_url = 'login'

    success_url = '/'

    def form_valid(self, form):
        return super().form_valid(form)

1 Ответ

1 голос
/ 10 апреля 2020
class EqualityDiversityView(LoginRequiredMixin, CreateView):
    model = EqualityDiversity
    template_name = 'equality_diversity.html'
    form_class = EqualityDiversityForm
    login_url = 'login'

    success_url = '/'

    def form_valid(self, form):
        # this is a view, You have self.request
        self.request.user.edi = True
        # apply changes to db
        self.request.user.save()
        return super().form_valid(form)  # redirects to success_url

или лучше

class EqualityDiversityView(LoginRequiredMixin, CreateView):
    model = EqualityDiversity
    template_name = 'equality_diversity.html'
    form_class = EqualityDiversityForm
    login_url = 'login'

    success_url = '/'

    def form_valid(self, form):
        # form.instance is an instance of the model that the form defines in META
        form.instance.edi = True
        # apply changes to db
        form.instance.save()
        return super().form_valid(form)  # redirects to success_url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...