gpt4 book ai didi

django - 如何过滤嵌套的相关 django 对象

转载 作者:行者123 更新时间:2023-12-01 02:02:27 25 4
gpt4 key购买 nike

我有一个应用程序,其中有很多投资者投资相同的轮次,这些轮次都属于公司,如下所示。但是,当用户(投资者)登录时,我只希望他能够看到他的投资。

    {
"id": 1,
"name": "Technology Company",
"rounds": [
{
"id": 1,
"kind": "priced round",
"company": 1,
"investments": [
{
"id": 1,
"investor": 1,
"round": 1,
"size": 118000,
},
{
"id": 2,
"investor": 2,
"round": 1,
"size": 183000,
},
]
}
]
},

目前,我的 View 集扩展 get_queryset如此:
class CompanyViewSet(viewsets.ModelViewSet):
def get_queryset(self):
user = self.request.user
investor = Investor.objects.get(user=user)
companies = Company.objects.filter(rounds__investments__investor=investor)
return companies

它检索属于投资者的投资,但是当它再次使用这些投资来检索轮次时,它会与所有投资者一起抢占该轮次。

我怎么写才能让它只向投资者显示下面的投资?

这是我的模型:
class Company(models.Model):
name = models.CharField(max_length=100)

class Round(PolymorphicModel):
company = models.ForeignKey(Company, related_name='rounds', blank=True, null=True)

class Investment(PolymorphicModel):
investor = models.ForeignKey(Investor, related_name='investor')
size = models.BigIntegerField(default=0)

最佳答案

你对发生的事情的描述很不清楚。 “什么时候需要再次进行这些投资”是什么意思?无论如何,我猜你需要做的是使用 .prefetch_related和一个 Prefetch目的。

from django.db.models import Prefetch

class CompanyViewSet(viewsets.ModelViewSet):
def get_queryset(self):
user = self.request.user
investor = Investor.objects.get(user=user)
companies = Company.objects.filter(
rounds__investments__investor_id=investor.id
).prefetch_related(Prefetch(
'rounds__investments',
queryset=Investment.objects.filter(
investor_id=investor.pk,
),
))
return companies

我还没有测试过这个片段,但它应该给你一个正确方向的指针。我也优化了 investor查找仅检查 id,这将为您节省不必要的间接访问。

关于django - 如何过滤嵌套的相关 django 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985912/

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