Я хочу иметь возможность связать мою модель пользователя, модель профиля и отдельную модель вместе. Моя текущая структура модели выглядит следующим образом:
class Profile(models.Model):
COORDINATOR = 1
LEADER = 2
ADMIN = 3
ROLE_CHOICES = (
(COORDINATOR, 'Coordinator'),
(LEADER, 'Leader'),
(ADMIN, 'Admin'),
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
team = models.ForeignKey(Team, on_delete=models.PROTECT,null=True)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, null=True, blank=True)
agent_code = models.CharField(max_length=15, null=True, blank=True)
class DailyReports(models.Model):
agent_code = models.CharField(max_length=15, blank=True, null=True)
product = models.CharField(max_length=15)
num_free = models.IntegerField(blank=True, null=True)
apps_submitted = models.IntegerField(blank=True, null=True)
apps_activated = models.IntegerField(blank=True, null=True)
prem_submitted = models.DecimalField(max_digits=20, decimal_places=2,blank=True, null=True)
date = models.DateField(auto_now=False,auto_now_add=False,null=True,blank=True)
Я могу связать Profile
и User
, но я пытаюсь связать Profile
с DailyReports
на agent_code
, а затем связать с User
моделью.
Итак, что-то вроде следующего:
test_query = DailyReports.objects.filter(product__in=['LT15', 'LT121']) \
.values('agent_code') \
.annotate(premium=Sum('prem_submitted')) \
.order_by('-premium') \
Я получаю вывод, как и ожидалось:
{'agent_code': 'ABC123', 'premium': Decimal('50015.87')}
{'agent_code': 'DEF456', 'premium': Decimal('44818.20')}
{'agent_code': 'GHI789', 'premium': Decimal('35322.35')}
...
Но я также хочу получить информацию из Profile
, основанную на agent_code
, а затем связанную информацию User
, основанную на связи, установленной между agent_code
между Profile
и DailyReports
, например, что мой вывод будет выглядеть так:
{'agent_code': 'ABC123', 'premium': Decimal('479872.55'), user.profile.first_name, user.profile.last_name, profile.user_id, profile.role}
{'agent_code': 'DEF456', 'premium': Decimal('448118.20'), user.profile.first_name, user.profile.last_name, profile.user_id, profile.role}
{'agent_code': 'GHI789', 'premium': Decimal('356322.35'), user.profile.first_name, user.profile.last_name, profile.user_id, profile.role}