Django - ForeignKey "Reverse" ("_set") - PullRequest
       16

Django - ForeignKey "Reverse" ("_set")

0 голосов
/ 10 апреля 2019

Мне нужно вернуться обратно через мой Foreignkey.По некоторым причинам это не работает ...

models.by:

class Investment(models.Model):
 feeder = models.ForeignKey(Fund, on_delete=models.CASCADE)
 investor = models.ForeignKey(Investor, on_delete=models.CASCADE)

(...)

class Fund(models.Model):
 slug = models.CharField(max_length=100, default = 'default')

(...)

class Investor(models.Model):
 account = models.CharField(max_length = 10, unique=True)
 first_name = models.CharField(max_length = 100)

(...) views.py:

Investment.objects.filter(investor__pk=pk)

-> Мне нужно добраться до атрибута слизняка Fiund для каждой инвестиции инвестора. У меня уже естьфильтруется на инвестора (это нормально).Далее идет круиз к слизню.Я предполагаю, что мне нужно работать с fund.set_all (), но это не работает .. Кто-нибудь на помощь?

Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Если вам нужны только значения, вы можете получить их одним запросом:

my_investor = Investor.objects.get(pk=pk)
my_investor.invesment_set.values('id', 'feeder__slug`)

Или вы можете получить другой запрос, если вам не нужен сам экземпляр инвестора:

Investment.objects.filter(investor__pk=pk).values('id', 'feeder__slug')
0 голосов
/ 11 апреля 2019

Я думаю, вы немного смущены тем, как это работает. Чтобы пройти путь от Инвестора -> Фонды, вам придется пройти через Инвестора -> Инвестиции -> Фонды. Вы можете сделать это так:

Сначала используйте related_name:

class Investment(models.Model):
    feeder = models.ForeignKey(Fund, on_delete=models.CASCADE, related_name="investmentAsFeeder")
     investor = models.ForeignKey(Investor, on_delete=models.CASCADE, related_name="investmentAsInvestor")

Затем вы можете использовать его так:

investor = Investor.objects.get(id=1)
investors_investments = investor.investmentAsInvestor.all()
investor_investment_funds = Fund.objects.filter(investmentAsFeeder__in=investor_investments)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...