【问题标题】:django rest framework: Get url parameter value in a model propertydjango rest框架:在模型属性中获取url参数值
【发布时间】:2017-09-15 13:42:11
【问题描述】:

我有一个产品模型,其中一个属性是“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

【问题讨论】:

    标签: python django django-models django-views django-rest-framework


    【解决方案1】:

    我猜你想要什么是不可能的(在模型本身上有my_fn)。

    您需要使用SerializerMethodField,这样您就可以访问该对象,但也可以访问请求(以及它的各种参数)。

    【讨论】:

      【解决方案2】:

      这个逻辑属于序列化程序,而不是模型。您可以通过self.context['request'] 访问它。

      【讨论】:

      • 这不能在模型中访问?或者我可以通过序列化器将它传递给模型吗?
      • 模型知道请求是没有意义的。这是通往容易失败的高度耦合代码的道路。让视图或序列化程序获取值并可能将其传递给模型,但不要将模型和请求绑定在一起
      • 多解释一下为什么以及如何会很好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2014-06-28
      • 1970-01-01
      • 2019-04-27
      • 2017-07-28
      • 2020-09-22
      相关资源
      最近更新 更多