Django {% if对象.外键%}返回与值相反的值



我有两个模型。

第一个是Collection Title,第二个是Title Status。在标题状态中,我有一个名为collection_title_status的外键,指向CollectionTitle。

我已经渲染了表单TitleStatusForm在我的collection_title_detail.html与DetailView和FormMixin。这个表单是模态的

全局而言,这部分工作,这意味着我可以填写表单,它保存数据并在集合标题和标题状态的外键之间创建链接(例如,如果CollectionTitle id是61,我的collection_title_status值也将是61)。

我想做什么:

  • 如果集合标题没有链接到标题状态(意味着用户还没有启动状态监控),那么我想显示名为"启动"的按钮,该按钮打开包含TitleStatusForm的模式,以启动标题状态模型

  • 如果集合标题已经链接到标题状态(这应该在完成上面的第一步后完成),那么我不想显示上面提到的按钮和模态。相反,我想显示用户之前为每个字段输入的值。

我是这样做的:

models.py(我故意没有包括不同的选择)

class CollectionTitle(models.Model):
collection = models.ForeignKey(Collection,
related_name="has_titles", on_delete=models.CASCADE)
type = models.CharField(max_length=10, choices=CHOICES, default=MOBILE)
title = models.CharField(max_length=20, null=True)
date_posted = models.DateTimeField(default=timezone.now)
class TitleStatus(models.Model):
collection_title_status = models.ForeignKey(CollectionTitle, related_name="has_status", on_delete=models.CASCADE, null=True)
is_active = models.CharField(max_length=20, choices=IS_ACTIVE, null=True)
check_one = models.CharField(max_length=20, choices=IS_DONE, null=True)
check_one_date = models.DateField(default=datetime.date.today)

views.py

class CollectionTitlesDetail(LoginRequiredMixin, FormMixin, DetailView):
model = CollectionTitle
form_class = TitleStatusForm
template_name = 'taskflow/collection_titles_detail.html'
success_url = None
def get_context_data(self, **kwargs):
context = super(CollectionTitlesDetail, self).get_context_data(**kwargs)
context['tgt_titles'] = CollectionTitle.objects.filter(collection=self.object.collection)
context['checks'] = TitleStatusForm()
return context
def post(self, request, *args, **kwargs):
form = TitleStatusForm(request.POST)
tgt = self.get_object()
if form.is_valid():
new_status = form.save(commit=False)
new_status.collection_title_status = tgt
new_status.is_active = 'Actif'
new_status.save()
return redirect('taskflow:collection_titles')
else:
return redirect('taskflow:collection_all')

collection_titles_detail.html

{% if object.has_status %}
<p>TRUE</p> #to test it I just wrote this
{% else %}
display button + modal to initiate Status
{% endif %}

因此,根据上面的代码,如果我运行服务器并去/collection/titles/31/,我应该能够看到初始化按钮,因为没有标题状态链接到id为31的collection标题。(实际上数据库中根本没有标题状态)。但是我得到了

TRUE

结果. .如果我将If条件更改为If not,我将获得初始化按钮…而我应该得到TRUE.

最后,如果我这样做:

{% if not object.has_status %}
display button + modal to initiate Status 
{% else %}
<p>TRUE</p> #to test it I just wrote this
{% endif %}

我再次得到TRUE而我应该得到初始化按钮…

显然是我做错了什么,而我自己也不明白。

任何帮助都将是感激的。

非常感谢!

has_statusRelatedManager,并且始终为"true",则需要在管理器上执行查询,以确定是否存在任何相关对象。exists是对

执行的最简单的查询
{% if not object.has_status.exists %}
display button + modal to initiate Status 
{% endif %}

最新更新