gpt4 book ai didi

Django:在所有查询集对象上运行方法

转载 作者:行者123 更新时间:2023-12-02 09:30:10 26 4
gpt4 key购买 nike

我想知道以下是否可行,以及是否有人可以解释如何做。我正在使用Django REST Framework

我有一个模型,在该模型中我有一个名为产品的类。产品具有名为 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')

最佳答案

你可以写一个custom manager为你的模型。像这样的事情:

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)

关于Django:在所有查询集对象上运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14904329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com