基于字段值的Django过滤

时间:2013-11-22 10:10:56

标签: python django mongodb django-rest-framework

我正在使用Django,我想在那个

中使用过滤器

我的产品和公司型号

class Product(models.Model):
    name = models.CharField(max_length=200)
    companyId = models.ForeignKey(Comapany)

class Company(models.Model):
    domain = models.CharField(max_length=200)

我想根据当前用户的companyId检索产品。所以我已经实现了我的观点..

class ListProducts(APIView):
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAdminUser,)

def get(self, request):
        if request.user.is_authenticated():
            userCompanyId = request.user.get_profile().companyId
        products = Product.objects.filter(companyId__id__exact = userCompanyId)
        serializer = ProductSerializer(products)
        return Response(serializer.data)

我的产品数据

{
   "_id": ObjectId("5284ceaae9cfff79368e1f29"),
   "companyId": "528458c4bbe7823947b6d2a3",
   "name": "Apple Juice" 
}
{
   "_id": ObjectId("5267bb4ebbe78220588b4567"),
   "companyId": "52674f02bbe782d5528b4567",
   "name": "Small Soft & Moist Cranberry" 
}

我的公司数据

{
   "_id": ObjectId("528458c4bbe7823947b6d2a3"),
   "domain": "Manufacturing" 
}
{
   "_id": ObjectId("52674f02bbe782d5528b4567"),
   "domain": "Manufacturing" 
}

我的输出为[]

问题是,在研究django doc的过滤器时,我无法得到它......所以请帮助我..

3 个答案:

答案 0 :(得分:5)

我解决了这个错误。实际上指定产品模型的companyId引用公司模型的Id字段的方式是错误的。所以我看到了userprofile如何引用user模型。我在这里提到我的更改。

产品型号

class Product(models.Model):
    name = models.CharField(max_length=200)
    company = models.ForeignKey(Company,null=True)

查看

class ListProducts(APIView):
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAdminUser,)
    model = Product

    def get(self, request):
        if request.user.is_authenticated():
            userCompanyId = request.user.get_profile().companyId
        products = Product.objects.filter(company = userCompanyId)
        serializer = ProductSerializer(products,many=True)
        return Response(serializer.data)

将company_id放入公司数据中

{
   "_id": ObjectId("5284ceaae9cfff79368e1f29"),
   "company_id": "528458c4bbe7823947b6d2a3",
   "name": "Apple Juice" 
}

答案 1 :(得分:0)

显然,您的用户个人资料模型的companyId不是整数字段,因此您应该将Product模型调整为具有兼容的companyId类型。哦,是的:你没有Company型号吗?

答案 2 :(得分:0)

这一行:

ProductSerializer(products)

应该是:

ProductSerializer(products, many=True)

否则,虽然您的问题似乎与Django REST框架无关,但仅针对您运行的特定过滤器未返回任何结果。

仔细检查request.user.get_profile()是否返回了正确的个人资料,仔细检查userCompanyId是否设置正确,并仔细检查Product.objects.filter(companyId__id__exact=userCompanyId).count()返回的结果数。

我猜您要么userCompanyId设置不正确,要么只有任何匹配的Product记录。