第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:如何從與用戶相關的子查詢集中獲得一個獨特的父列表?

Django:如何從與用戶相關的子查詢集中獲得一個獨特的父列表?

慕勒3428872 2021-04-05 08:27:33
這些是我的模型,其中Apps具有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']這是我的觀點,有什么方法可以對其進行優(yōu)化?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)
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

我不會寫一個完整的答案,因為我沒有足夠的時間并且無法立即測試代碼。但是無論如何:您正在尋找的功能是:

  • 查找跨越關系的關系(另請參見關于多值關系的部分)

  • 相關描述符

  • prefetch_relatedPrefetch對象

結合所有這些功能應該可以解決您的問題。唯一的警告是Prefetch使用到目前為止我從未使用過的對象過濾菜單項,因此我無法確定它是否可以按預期工作。


查看完整回答
反對 回復 2021-04-13
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

這可以刪除app_list和“ for循環(huán)”

apps = App.objects.filter(menu__name=F('menu'))

@bruno desthuilliers,我仍在嘗試了解預取


查看完整回答
反對 回復 2021-04-13
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號