![](/img/trans.png)
[英]How to query a model by a related object and get the related object in the queryset using the 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.