【发布时间】:2022-01-25 20:11:43
【问题描述】:
我想向您询问有关如何解决我现在正在苦苦挣扎的问题的建议。我的目标是有一个简单的页面,一个接一个地呈现我的模型实例,但根据用户,它应该跳过某些实例。
models.py
class Item(models.Model):
creator= models.ForeignKey(User,null=True, on_delete=SET_NULL)
title = models.CharField(max_length=200)
private = models.BooleanField(null=False, blank=True, default=False)
views.py
def topics(request):
items=Item.objects.all()
context={'items' : items}
return render(request, 'items.html', context)
main.html
{% for item in items %}
<div>
<p>{{item.title}}</p>
</div>
{% endfor %}
问题: 如果“私人”为真,如果用户不是员工,我想跳过该项目。这样我可以根据这个布尔值分离项目。推荐/最好的方法是什么? 我不想要 html 中的 if/else 语句,然后重复代码。随着项目的发展,它变得一团糟。
提前致谢!
一种可能的解决方案:
@Eugenij 的回答给了我过滤views.py 的想法。我只是在 if 语句中检查授权并基于此返回一个查询集。
我的意思是它工作正常,但由于我是 Django 新手,我仍然会感谢其他输入。
views.py
def topics(request):
if request.user.is_staff == True:
items=Item.objects.all()
else:
items=Item.objects.filter(private=False)
context={'items' : items}
return render(request, 'items.html', context)
【问题讨论】: