简体   繁体   English

更新 Django 中的用户 model 当他们在不同的 model 上填写表格时

[英]Updating a user model in Django when they fill out a form on a different model

I am struggling to work out how to achieve something and would appreciate someone suggesting the correct Django way to do it.我正在努力解决如何实现某事,并希望有人提出正确的 Django 方法来做到这一点。

I have a custom user model which is fairly basic but includes a BooleanField which says whether they have filled out a voluntary equality and diversity form.我有一个自定义用户 model,它相当基本,但包含一个 BooleanField,表示他们是否填写了自愿平等和多样性表格。 There is a very basic model which holds the equality and diversity form data without any reference to the users which filled out each response.有一个非常基本的 model 保存相等和多样性表格数据,而无需参考填写每个响应的用户。 What I want is this, when a user fills out a valid equality and diversity form it puts True in the user model box to say they have filled out the form.我想要的是,当用户填写有效的平等和多样性表格时,它会将 True 放入用户 model 框中,表示他们已经填写了表格。

I would be massively appreciative if anyone knows the correct way to do this as I am tying myself up in knots and have got myself quite confused.如果有人知道正确的方法来做到这一点,我将非常感激,因为我正在把自己绑在结上并且让自己很困惑。

Here is a simplified version of the code:这是代码的简化版本:

users/models.py用户/模型.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)])

equality_diversity/models.py平等_多样性/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)

equality_diversity/views.py平等_多样性/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)
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

or better或更好

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM