我的应用程序将用户映射到公司,所以他们只能看到他们的公司数据,除非用户is_staff能够看到所有数据。Django get_queryset的干式方法
我一遍又一遍地写同样的查询,并且想重构它以使用干法。
问题是没有东西会被返回。没有错误或者
models.py
class Company(models.Model):
...
class Site(models.Model):
company = models.ForeignKey(Company)
...
class UserProfile(AbstractUser):
company = models.ForeignKey(Company)
...
views.py
def get_company(user):
if user.is_staff:
company = Company.objects.all().order_by('-name')
else:
company = Company.objects.get(id=user.company.id).order_by('-name')
return company
class DashboardList(ListView):
model = Company
template_name = 'sites/dashboard.html'
paginate_by = 25
def get_queryset(self):
return get_company(self.request.user)
它不应该是'Company.objects.filter(ID = user.company.id)。 order_by(' - name') '而不是'get()'? – alecxe
另请注意,假设'公司'是用户到公司的FK,'user.company' *是相关公司,所以根本没有必要进行查询。 –