我有一个应用程序,有很多投资者在相同的轮投资,这属于公司,如下所示。但是,当用户(投资者)登录时,我只希望他能够看到他的投资。
{
"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,
},
]
}
]
},目前,我的视图集是这样扩展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)发布于 2016-01-25 16:42:32
你对所发生的事情的描述非常不清楚。“当它再次接受这些投资”是什么意思?不管怎样,我猜你需要做的就是使用.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,这将为您节省不必要的间接性。
https://stackoverflow.com/questions/34985912
复制相似问题