2

我想知道以下是否可能以及是否有人可以解释如何。我正在使用Django REST 框架

我有一个模型,在那个模型中我有一个名为Product的类。产品具有称为is_product_safe_for_user的方法。它需要用户对象和自我(产品)。

模型.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"

(忽略上面的语法,它只是给你一个想法)

我想要做的是对所有查询集对象运行该方法,如下所示,但我不知道如何......

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

有时我只想在一个对象上运行方法。

还是应该进入序列化器?如果有怎么办?...

class ProductSerializer(serializers.ModelSerializer):

    safe = serializers.Field(Product='is_product_safe_for_user(self,user)')

    class Meta:
        model = Product
        fields = ('id', 'title', 'active', 'safe')
4

1 回答 1

6

您可以为您的模型编写自定义管理器。像这样的东西:

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

然后你会像这样使用它:

safe_products = Product.onlysafeobjects.filter_by_user(request.user)
于 2013-02-15T22:37:03.110 回答