我正在使用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的过滤器时,我无法得到它......所以请帮助我..
答案 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
记录。