需要访问django模板中的manytomanyfield

时间:2015-06-04 17:01:34

标签: python django

所以我有这些模特:

class CofifiUser(models.Model):
  user = models.OneToOneField(User)

class QuoteIdea(models.Model):
  creator = models.ForeignKey(CofifiUser,related_name="creator")
  text = models.TextField(max_length=250)
  votes = models.CharField(max_length=100,default="0")
  votes_received = models.ManyToManyField(CofifiUser)
  created_at = models.DateTimeField(auto_now_add=True)

我想要:

If request.user.username is in the item.votes_received.all 
  <button class="disabled">Button</button>
Else 
  <button class="btn btn-primary">Button</button>

与Facebook上的Like按钮几乎相同。 你不能给一个页面多一个(在python / django中) 请在这里需要一些帮助:)

2 个答案:

答案 0 :(得分:1)

这里需要记住的重要一点是,必须为每次比较查询多对多关系,甚至预先加载所有m2m数据以查看用户是否在{{{ 1}} queryset。

在这种情况下,我通常会选择一种非规范化的方法来进行布尔比较。我将创建一个字段,仅将ID保存为comma-separated ints,并通过post_save signal更新字段。

这极大地简化了视图和模板级别的操作,并且还避免了必须进行任何连接或任何其他查询。

假设您循环遍历votes_received个实例列表并将QuoteIdea的实例传递给模板,并且您已向CofifiUser添加了一个名为{{1}的字段你可以这样做:

QuoteIdea

答案 1 :(得分:0)

我做了类似的事情,效果非常好。

data-in-memory