如何获取django模板来识别manytomanyfield比较?

时间:2018-08-16 21:37:25

标签: django python-3.x django-forms django-templates many-to-many

在我的项目中,我目前正在尝试访问一个多字段字段并将其与另一个字段进行比较。在几种情况下,我正在做类似的事情并且正在工作。在这种情况下的区别是,我试图从本质上说,如果多对多字段中的值之一等于另一个多通字段中的值,那么就做点什么。...

这是我的代码...

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 %}

上面的示例是我要执行的操作的简化版本。...我实际上是在尝试比较manytomany字段,如果任何值匹配,请执行操作。我今天大部分时间都在尝试这种组合。

如果我做类似的事情

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

这很好。我正在努力尝试弄清楚如何比较多个领域。我怀疑用户查询工作正常,因为它不是多方字段。

我正在考虑关闭格式。我尝试使用_set来发布者和用户发布者,并且当我尽力​​打印输出时,实际上我看到user_publisher和发布者查询集是相同的。但是,我的django模板没有显示任何结果。预先感谢您的任何想法。

整个下午,我和Google一样都在网上冲浪,但是我不太清楚自己在做什么。

这里是我的问题的更多细节。我目前正在执行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>]>

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

1 个答案:

答案 0 :(得分:0)

经过一两天的思考,能够弄清楚如何获取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,然后做一些花哨的事情。感谢您在此过程中提出的建议,以帮助我认真思考。