如何选择CTYPE知道用户?
models.py:
from django.contrib.auth.models import User
class CompanyType(models.Model):
ctype = models.CharField(max_length=20)
class Company(models.Model):
name = models.CharField(max_length=50)
companytype = models.ForeignKey(CompanyType, on_delete=models.CASCADE)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.ForeignKey(Company, on_delete=models.CASCADE)
我知道我可以这样做,但是有没有办法将其完全链在一行中?
def getcompanytype(request):
user_id = request.user.id
company_id = Profile.objects.get(user_id__exact=user_id).company_id
companytype_id = Company.objects.get(id=company_id).companytype_id
companytype = CompanyType.objects.get(id=companytype_id).ctype
return(companytype)
本质上,我想要此SQL语句:
SELECT
ct.ctype
From auth_user u
left outer join Profile p
on p.user_id = u.id
left outer join Company c
on p.company_id = c.id
left outer join CompanyType ct
on ct.id = c.companytype_id
where u.id = 1 # actually current user ID, not hardcoded "1"
我认为您可以通过在 filter
或 get
呼叫中遵循外国人的反向关系来做到这一点
CompanyType.objects.get(company__profile__user__id__exact=user_id).ctype
尽管我建议您在django shell中尝试一下,并确保反向关系被命名为您的期望!(例如,CompanyType
将具有一个company_set
属性,该属性为所有具有特定CompanyType
的公司提供;当您进行过滤器查询时,不应包括_set
。(