首页 > 解决方案 > 如何让 django 模板识别多域比较?

问题描述

在我的项目中,我目前正在尝试访问多对多字段并将其与另一个字段进行比较。我有几个案例我正在做类似的事情并且它正在工作。这种情况下的不同之处在于,我试图从本质上说,如果这个多对多字段中的一个值等于另一个多对多字段中的一个值,那么做一些事情......

这是我的代码...

Book(models.Model):
    publisher = models.ManyToManyField(Name)

Userprofile(models.Model):
    publisher = models.ManyToManyField(Name)

在我的 Django 模板中,我正在尝试执行类似...

{% If user_publisher in form.initial.publisher_set.all %} 
{{ publisher.name }}
{% endif %}

上面的示例是我正在尝试做的简化版本....我实际上是在尝试比较多对多字段,如果任何值匹配,则执行操作。我今天大部分时间都在这样做,并尝试了几种组合。

如果我做类似的事情

{% if user in form.initial.publisher.all %}

这工作正常。我正在努力尝试找出如何比较许多字段。我怀疑用户查询工作正常,因为它不是一个多字段。

我在想我的格式是关闭的。我尝试将 _set 用于发布者和用户发布者,当我打印输出时,我实际上看到 user_publisher 和发布者查询集是相同的。但是,我的 django 模板没有显示任何结果。提前感谢您的任何想法。

我整个下午和谷歌都在网上冲浪,但不能完全弄清楚我做错了什么。

这是我的问题的更多详细信息。我目前正在做一个 CreateView,我试图通过覆盖 get_initial 来获取现有记录,如下所示:

class BookUpdateView(CreateView):
    model = Book 
    form_class = Book
    template_name = 'Book/update_book.html'

    def get_initial(self):
        initial = super(BookUpdateView, self).get_initial()
        book = Book.objects.get(pk=self.kwargs["pk"])
        initial = book.__dict__.copy()

        initial.update({
             "publisher": publisher.all(),
        })
        return initial

因为我将复制这些记录作为起点并且这是一个 CreateView,所以我还没有从 get_context_data 角度查询的 PK 或 ID。不知道如何获取我正在复制但尚未保存的数据。我实际上是想弄清楚用户是否通过他们的用户个人资料拥有相同的发布者,并且能够找出 get_context_data 的格式,如下所示:

def get_context_data(self, **kwargs):
    context = super(BookUpdateView, self).get_context_data(**kwargs)
    user_publisher = self.request.user.userprofile.publisher.all()
    return context  

我试图做类似的事情......

{% if user_publisher in form.initial.publisher_set.all %} 

但是模板永远不会承认这两个实际上确实匹配......

当我打印变量时......

他们俩都显...

<QuerySet [<Publisher: ACME Publishing>]>
<QuerySet [<Publisher: ACME Publishing>]>

但是模板不承认它们是相同的。使用上面的模板语言时,屏幕没有像我预期的那样呈现。没有错误,但最终结果也不是我所期望的。提前感谢您的任何其他想法。

标签: djangopython-3.xdjango-formsdjango-templatesmany-to-many

解决方案


经过一两天的思考,我能够弄清楚如何获取 PK,然后在上下文中使用它,这样我就可以通过上下文而不是直接使用表单来利用信息。

def get_context_data(self, **kwargs):
        context = super(UpdateProcedureView, self).get_context_data(**kwargs)
        pk=self.kwargs["pk"]
        publisher = Publisher.objects.filter(pk=pk).filter(individual_access=self.request.user).count()
        return context

然后在表格中我可以说如果发布者> 0 然后做一些花哨的事情。感谢一路上的建议,帮助我思考这个问题。


推荐阅读