我有一个产品型号,其中一个属性是“my_test_fn”。这是从我的序列化程序调用的。我的要求是,我想根据通过url的过滤器进行一些计算。如何在模型属性中获取url参数值?
我想在my_test_fn
中获得“过滤器”值models.py
class Product(AbstractProduct):
product_id = models.UUIDField(default=uuid.uuid4, editable=False)
##more fields to go
def my_test_fn(self):
filters = self.request.query_params.get('filters', None)
return {"key":"value"}
serializer.py
class MySerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('id','product_id','sku', 'title', 'my_test_fn',)
views.py
class ProductDetailConfiguration(viewsets.ViewSet):
lookup_field = 'product_id'
def retrieve(self, request, product_id=None):
queryset = Product.objects.filter(product_id=product_id)[0]
serializer = ProductConfigurationCustomSerializer(queryset, context={'request': request})
return Response(serializer.data)
API网址:
http://127.0.0.1:8000/api/v1/product-configuration/2FC2AA43-07F5-DCF4-9A74-C840FDD8280A?filters=5
答案 0 :(得分:0)
我想您想要的东西是不可能的(在模型本身上有my_fn
)。
您将需要使用SerializerMethodField,因此您将可以访问该对象,但也可以访问该请求(及其各种参数)。
答案 1 :(得分:-1)
此逻辑属于序列化程序,而不属于模型。您可以通过self.context['request']
访问它。