簡體   English   中英

使用Django ORM在方法中獲取相關模型

[英]Using Django ORM to get a related model in a method

提供以下模型...

class ProjectComment(RewardBase):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)

class User (AbstractBaseUser):
    email = models.EmailField()   

class Profile(models.Model):
    bio = models.CharField(max_length=80)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, unique=True)

項目中,我要獲取用戶Profile ,這就是我的工作方式。

    def get_profile_bio(self):
        return Profile.objects.get(user=self.user)

現在,我可以打印所有可以獲得個人簡介的項目的列表,但這是正確的方法嗎? 我擔心對於每個項目,它都會對數據庫進行新的SQL調用,這是否正確?

class ProjectComment(RewardBase):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name="projects")

class User (AbstractBaseUser):
    email = models.EmailField()   

class Profile(models.Model):
    bio = models.CharField(max_length=80)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, unique=True, related_name="profile")

然后,您可以獲取用戶和配置文件:

projects = ProjectComment.select_related('user', 'user__profile').exclude(user__isnull=True).all()

for project in projects:
    users = [user for user in project.user.all()]

接着:

for user in users:
    profiles = [profile for profile in user.profile.all()]

為什么您的ForeignKey中有唯一的約束? 如果您需要Uniquness,請創建一個OneToOneField

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM