Django中的SQL JOIN请求使用for循环,有更好的方法吗?

时间:2013-06-07 09:22:57

标签: django django-models

我正在开发类似于网络电子商务网站的网络应用程序,来自不同公司的不同人员可以在我的网络应用程序的管理页面中输入他们的产品。 我试图让每个用户在管理页面中查看,只查看他所属公司的产品,更详细地说,属于公司的产品,其增值税与用户的公司增值税相同。

我的模型模式就像。带产品系列外键的产品,具有目录的外键,最终具有公司的外键。所以为了达到上述目的,我想出了类似下面的代码:


**admin.py**
class ProductAdmin(admin.ModelAdmin):

def queryset(self, request):
    qs = super(ProductAdmin, self).queryset(request)
    if request.user.is_superuser:
        return qs
    else:
        try:
            comp = Company.objects.get(vat_number = request.user.get_profile().organization_vat)
            comp_catalogs = Catalog.objects.filter(company_id = comp.id)
            print '3. ', comp_catalogs
            lista = []
            for cat in comp_catalogs:
                lista.append(cat.id)
            print '4. ', lista
            lines = Line.objects.filter(catalog_id__in=lista)
            lista = []
            for line in lines:
                lista.append(line.id)
            return qs.filter(line_id__in=lista)
        except:
            return qs.none()

有没有办法以更好的方式进行上述一系列查询(代码更少)?

1 个答案:

答案 0 :(得分:1)

这应该这样做:

def queryset(self, request):
    qs = super(ProductAdmin, self).queryset(request)
    if request.user.is_superuser:
        return qs
    else:
        return qs.filter(line__catalog__company__vat_number=request.user.get_profile().organization_vat)