1

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

我的模型架构是这样的。具有产品线外键的产品,其具有目录外键,最终具有公司外键。因此,为了实现上述目的,我想出了如下代码:


**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()

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

4

1 回答 1

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)
于 2013-06-07T09:34:05.733 回答