Django 模板语言:为整个模型创建条件(不是逐条记录)
Django Template Language: Create conditional for entire Model (not record by record)
新手问题。根据模板中的以下脚本...
{% if request.user not in Result %}
<p>You have no account in the system.</p>
{% endif %}
...声明“您在系统中没有帐户。”在屏幕上出现 100 次---因为有 100 条记录,因此条件被检查 100 次。
有没有办法修改脚本使语句只出现一次?意思是,它会检查整个数据库一次,以寻找 request.user 出现在模型中任何地方的证据(而不是它是否出现在数据库中的 100 条记录中的每条记录中)?
也许在 views.py 和模板中有 easier/better 方法可以做到这一点,但这超出了我的知识范围。谢谢你。下面是名为 Result 的模型。
models.py
class Result(models.Model):
custom_user = models.ForeignKey(CustomUser, default=None,
null=True, on_delete=models.SET_NULL)
decision = models.ForeignKey(Decision, default=None,
null=True, on_delete=models.SET_NULL,
verbose_name="Decision")
vote_eligible = models.BooleanField(default=True)
vote = models.CharField(default="", max_length=100,
blank=True, verbose_name="Your
Vote:")
voted_already = models.BooleanField(default=False)
@staticmethod
def get_absolute_url():
return "/home"
def __str__(self):
return f"{self.custom_user}"
views.py
class VoteForm(LoginRequiredMixin, CreateView):
model = Result
form_class = VotingForm
template_name = 'users/vote_form.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context["Result"] = Result.objects.all()
return context
forms.py
class VotingForm(forms.ModelForm):
class Meta:
model = Result
fields = ['decision', 'vote']
views.py
因为需求是显示登录用户是否有'Result'模型的账号。我已经过滤了特定于用户的行。您可以循环遍历模板中的 user_specific。如果用户出现在 'Result' 中,模型 'user_specifc' 将具有元素。如果用户不在 'Result' table 中,'user_specific' 将为空。在您的模板中,您可以检查 'user_specific' 是否为空列表。
class VoteForm(LoginRequiredMixin, CreateView):
model = Result
form_class = VotingForm
template_name = 'users/vote_form.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context["Result"] = Result.objects.all()
context['user_specific'] = Result.objects.filter(custom_user=self.request.user)
return context
template.html
{% if not user_specific %}
<p>You have no account in the system.</p>
{% endif %}
新手问题。根据模板中的以下脚本...
{% if request.user not in Result %}
<p>You have no account in the system.</p>
{% endif %}
...声明“您在系统中没有帐户。”在屏幕上出现 100 次---因为有 100 条记录,因此条件被检查 100 次。
有没有办法修改脚本使语句只出现一次?意思是,它会检查整个数据库一次,以寻找 request.user 出现在模型中任何地方的证据(而不是它是否出现在数据库中的 100 条记录中的每条记录中)?
也许在 views.py 和模板中有 easier/better 方法可以做到这一点,但这超出了我的知识范围。谢谢你。下面是名为 Result 的模型。
models.py
class Result(models.Model):
custom_user = models.ForeignKey(CustomUser, default=None,
null=True, on_delete=models.SET_NULL)
decision = models.ForeignKey(Decision, default=None,
null=True, on_delete=models.SET_NULL,
verbose_name="Decision")
vote_eligible = models.BooleanField(default=True)
vote = models.CharField(default="", max_length=100,
blank=True, verbose_name="Your
Vote:")
voted_already = models.BooleanField(default=False)
@staticmethod
def get_absolute_url():
return "/home"
def __str__(self):
return f"{self.custom_user}"
views.py
class VoteForm(LoginRequiredMixin, CreateView):
model = Result
form_class = VotingForm
template_name = 'users/vote_form.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context["Result"] = Result.objects.all()
return context
forms.py
class VotingForm(forms.ModelForm):
class Meta:
model = Result
fields = ['decision', 'vote']
views.py
因为需求是显示登录用户是否有'Result'模型的账号。我已经过滤了特定于用户的行。您可以循环遍历模板中的 user_specific。如果用户出现在 'Result' 中,模型 'user_specifc' 将具有元素。如果用户不在 'Result' table 中,'user_specific' 将为空。在您的模板中,您可以检查 'user_specific' 是否为空列表。
class VoteForm(LoginRequiredMixin, CreateView):
model = Result
form_class = VotingForm
template_name = 'users/vote_form.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context["Result"] = Result.objects.all()
context['user_specific'] = Result.objects.filter(custom_user=self.request.user)
return context
template.html
{% if not user_specific %}
<p>You have no account in the system.</p>
{% endif %}