所以我有这些模特:
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中) 请在这里需要一些帮助:)
答案 0 :(得分:1)
这里需要记住的重要一点是,必须为每次比较查询多对多关系,甚至预先加载所有m2m数据以查看用户是否在{{{ 1}} queryset。
在这种情况下,我通常会选择一种非规范化的方法来进行布尔比较。我将创建一个字段,仅将ID保存为comma-separated ints,并通过post_save signal更新字段。
这极大地简化了视图和模板级别的操作,并且还避免了必须进行任何连接或任何其他查询。
假设您循环遍历votes_received
个实例列表并将QuoteIdea
的实例传递给模板,并且您已向CofifiUser
添加了一个名为{{1}的字段你可以这样做:
QuoteIdea
答案 1 :(得分:0)
我做了类似的事情,效果非常好。
data-in-memory