Pro*_*eus 2 django django-rest-framework
我想知道以下是否可行以及是否有人可以解释如何.我正在使用Django REST Framework
我有一个模型,在那个模型中我有一个名为Product的类.产品具有名为is_product_safe_for_user的方法.它需要用户对象和自我(产品).
model.py
class Product(models.Model):
title = models.CharField(max_length=60, help_text="Title of the product.")
for_age = models.CharField(max_length=2,)
def is_product_safe_for_user(self, user):
if self.for_age > user.age
return "OK"
Run Code Online (Sandbox Code Playgroud)
(忽略上面的语法,它只是为了给你一个想法)
我想要做的是运行方法为所有的queryset对象,如下所示,但我不知道如何...
class ProductListWithAge(generics.ListAPIView):
permission_classes = (permissions.IsAuthenticated,)
model = Product
serializer_class = ProductSerializer
def get_queryset(self):
Product.is_product_safe_for_user(self,user)
# then somehow apply this to my queryset
return Product.objects.filter()
Run Code Online (Sandbox Code Playgroud)
还有一些时候我想在一个对象上运行methoud.
或者它应该进入Serializer?如果是这样的话......
class ProductSerializer(serializers.ModelSerializer):
safe = serializers.Field(Product='is_product_safe_for_user(self,user)')
class Meta:
model = Product
fields = ('id', 'title', 'active', 'safe')
Run Code Online (Sandbox Code Playgroud)
您可以为您的模型编写自定义管理器.像这样的东西:
class OnlySafeObjects(models.Manager):
def filter_by_user(self, user):
return super(OnlySafeObjects, self).get_query_set().filter(for_age__gte=user.age)
class Product(models.Model):
# your normal stuff
onlysafeobjects = OnlySafeObjects()
Run Code Online (Sandbox Code Playgroud)
然后你会像这样使用它:
safe_products = Product.onlysafeobjects.filter_by_user(request.user)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2358 次 |
| 最近记录: |