【发布时间】:2020-12-30 18:51:08
【问题描述】:
我有一个产品列表并希望在模板中显示它们,具体取决于产品的经销商是否为当前登录用户“所有”。所以这是我的看法:
class ArticleListView(ListView, LoginRequiredMixin):
template_name = "accounts/list_article_quentin.html"
model = Product
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context["website"] = Website.objects.first()
context["product_list"] = context["product_list"].filter(published=True)
# Get a list of all dealers associated to the current users.
currentUserDealers = self.request.user.dealers.all().values_list('id', flat=True)
context["current_user_dealers"] = list(currentUserDealers)
return context
所以 currentUserDealers 是与当前用户关联的经销商列表(经销商和用户之间是多对多关系)。
这是产品和经销商模型(仅相关部分):
class Product(models.Model, CloneMixin):
published = models.BooleanField(null=True,blank=True, default=False)
title = models.CharField(null=True,blank=True,max_length=100)
subtitle = models.CharField(null=True,blank=True,max_length=200)
(...)
dealer = models.ManyToManyField(Dealer, null=True,editable=True,related_name="product_to_dealer")
(...)
# Not sure what this does:
_clone_many_to_many_fields = ['parameter', 'tag', 'category', 'dealer','images']
(...)
class Dealer(models.Model, CloneMixin):
dealer_check = models.ForeignKey("self",null=True, blank=True, on_delete=models.SET_NULL)
published = models.BooleanField(null=True,blank=True, default=True)
(...)
users = models.ManyToManyField(User,null=True,blank=True, related_name='dealers')
(...)
在我的模板中,我想做类似的事情来决定是否展示产品:
{% if product.dealer.all.0.pk in current_user_dealer %}
(一个产品可以有多个经销商,但我稍后会看到,因此是 all.0)
显然这不起作用,但你明白了,我想看看当前产品的经销商 ID 是否在当前用户的关联经销商列表中,看看我们是否显示它。在模板中执行此操作的语法是什么?或者也许有更好的方法可以直接在视图中执行此操作?
【问题讨论】:
-
你能展示你的模型吗?
-
@SLEm 我用模特编辑了我的帖子!
-
那么一个产品可以有多个经销商吗?我不明白这个逻辑,但会尽力帮助,给我几分钟
-
是的,但目前它有点被忽略了,这就是为什么我只选择第一个。谢谢!
-
只需使用
ForeignKey,然后我的回答将 100% 有效
标签: python sql django django-templates backend