2

以下が可能かどうか、また誰かがその方法を説明できるかどうかを知りたいです。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')
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 に答える