亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據配置文件字段將三個模型關聯在一起

根據配置文件字段將三個模型關聯在一起

慕妹3146593 2021-06-04 09:02:53
我希望能夠將我的用戶模型、配置文件模型和單獨的模型聯系在一起。我當前的模型結構如下所示: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} 
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

如果一個配置文件將鏈接到多個 DailyReports 最佳設置將必須是


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) # <-- Remove the agent code from the profile model.

DailyReports 與 Profile 是多對一的關系。


class DailyReports(models.Model):

    profile = models.ForeignKey('Profile', related_name='daily_reports')

    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)

獲取配置文件的 DailyReports 列表


profile = Profile.objects.prefetch_related('daily_reports').first()


profile.daily_reports.all()

通過配置文件報告查詢


qs = (

    profile.daily_reports.filter(product__in=['LT15', 'LT121'])

        .annotate(premium=Sum('prem_submitted'))

        .values_list('agent_code', 'premium', 'profile__first_name', 'profile__last_name', 'profile__user_id', 'profile__role', named=True)

        .order_by('-premium')

)


results = [

    {

       'agent_code': report.agent_code,

       'premium': report.premium

       'first_name': report.profile__first_name,

       'last_name': report.profile__last_name,

       'user_id': report.profile__user_id,

       'role': report.profile__role

    } for report in qs

]


## {'agent_code': 'ABC123', 'premium': Decimal('479872.55'), ...} 


查看完整回答
反對 回復 2021-06-09
  • 1 回答
  • 0 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號