以下が可能かどうか、また誰かがその方法を説明できるかどうかを知りたいです。Django REST フレームワークを使用しています
モデルがあり、そのモデルには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"
(上記の構文は無視してください。アイデアを提供するだけです)
私がやりたいのは、以下のようなすべてのクエリセットオブジェクトに対してメソッドを実行することですが、方法がわかりません...
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()
1 つのオブジェクトだけでメソッドを実行したい場合もあります。
それとも、シリアライザに入れる必要がありますか? もしそうならどのように...
class ProductSerializer(serializers.ModelSerializer):
safe = serializers.Field(Product='is_product_safe_for_user(self,user)')
class Meta:
model = Product
fields = ('id', 'title', 'active', 'safe')