[英]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.