Можете ли вы горизонтально получить доступ к другим полям через "related_name" в Django?
У меня есть теоретический вопрос, который я должен решить, чтобы предоставить решение. Я читаю кусок кода, но что-то мне не понятно, как он обращается к полям через обратный поиск с "related_name". Я делюсь с вами важными частями кода, чтобы объясниться. Я искал больше информации, связанной с этим, и укрепил свои знания о "related_name", но не нашел ничего, что помогло бы мне.
class Account(models.Model):
country = models.ForeignKey(
'Country',
on_delete=models.PROTECT,
null=True,
blank=True
)
class Stage(models.Model):
step_name = models.CharField(max_length=100)
n_step = models.PositiveIntegerField(null=True, blank=True)
class Status(models.Model):
TIPOS_STATUS = {
('open', 'open'),
('open_staged', 'open_staged'),
('closed_won', 'closed_won'),
('closed_lost', 'closed_lost')
}
name = models.CharField(choices=TIPOS_STATUS, max_length=50)
class AssignedAccount(models.Model):
account = models.ForeignKey(
Account,
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='assignation',
)
status = models.ForeignKey(Status, on_delete=models.PROTECT)
stage = models.ForeignKey(
Stage,
null=True,
blank=True,
on_delete=models.PROTECT,
)
Дело в том, что я знаю, что могу сделать что-то вроде следующего с related_name и выполнить обратный поиск, чтобы увидеть все назначенные счета по отношению к счету:
account = Account.objects.get(pk=1)
assigned_accounts = account.assignation.all()
Но теперь посмотрим, что они сделают с FK между этими двумя в этом DF:
accounts = Account.objects.all()
accounts_dataframe = pd.DataFrame(
list(
accounts.values(
'pk',
'country__two_letter_code',
'assignation__stage__n_step',
'assignation__status__name'
)
)
)
Как если бы они пытались получить доступ через обратный поиск с "назначением" к другим полям "стадия" и "статус" модели "НазначенныйСчет" (которая в то же время имеет другие FKs). Но ведь так делать нельзя? В общем, я этого не понимаю, и любая помощь или разъяснения по этому поводу были бы просто великолепны. Надеюсь, я ясно попытался выразить свое непонимание этого куска кода. Заранее спасибо!