gpt4 book ai didi

python - Django:如何从与用户相关的子查询集中获取不同的父列表?

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:28 25 4
gpt4 key购买 nike

这些是我的应用程序具有 menu_items 的模型:

class App(models.Model):
name = models.CharField(max_length=50)

class Menu(models.Model):
name = models.CharField(max_length=120)
app = models.ForeignKey(App, on_delete=models.PROTECT)
url = models.CharField(max_length=120, null=True)

class Meta:
ordering = ['name', 'app']

这是我的 View ,有什么方法可以优化它吗?

class AboutView(TemplateView):
template_name = 'about.html'

def get_context_data(self, *args, **kwargs):
context = super(AboutView, self).get_context_data(*args, **kwargs)
menu_items = Access.objects.filter(user__id=self.request.user.id)
applist = []
for m in menu_items:
applist.append(m.menu.app.name)
apps = App.objects.filter(name__in=applist)
context = {
"menu_items": menu_items,
"apps": apps
}
return context

这是我的模板,我重新排列了每个应用程序下的 menu_items。

<ul class="navbar-nav ml-auto">
{% for app in apps %}
<li class="nav-item dropdown">
<a class="nav-link" href="#" id="appMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ app.name }}
</a>
<div class="dropdown-menu dropdown-menu-left" aria-labelledby="appMenu">
{% for item in menu_items %}
{% if item.menu.app.name == app.name %}
<a class="dropdown-item" href="{{ item.menu.url }}">{{ item.menu.name }}</a>
{# href="{{ item.menu.url }} #}
{% endif %}
{% endfor %}
</div>
</li>
{% endfor %}
</ul>

我希望有更好的方法来做到这一点。先感谢您。根据要求,这是访问模型

class Access(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.PROTECT)
user = models.ForeignKey(User, on_delete=models.PROTECT)

最佳答案

我不打算写一个完整的答案,因为我没有足够的时间,现在无法测试代码。但无论如何:您正在寻找的功能是:

结合所有这些功能应该可以解决您的问题。唯一需要注意的是使用 Prefetch 对象过滤菜单项,到目前为止我从未使用过它,所以我不能确定它是否会按预期工作。

关于python - Django:如何从与用户相关的子查询集中获取不同的父列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com