【问题标题】:Django Rest Framework read/write ModelSerializer with ChoiceFieldDjango Rest Framework 使用 ChoiceField 读/写 ModelSerializer
【发布时间】:2021-02-06 17:28:38
【问题描述】:

我的模型“OrderItem”中有几个字段是 ChoiceFields 或 Enums。我想代表选择的标签并使用serializers.CharField(source='get_service_display')。另见Django Rest Framework with ChoiceField

这工作正常,但创建对象不再工作,出现以下错误消息OrderItem() got an unexpected keyword argument 'get_service_display'

这是我的模型

class OrderItem(TimeStampedModel):
    class Categories(models.IntegerChoices):
        GRASS = (1, _('grass'))

    order = models.ForeignKey(Order, related_name='order_items', on_delete=models.CASCADE)
    unit_price = models.DecimalField(max_digits=6, decimal_places=2)
    category = models.IntegerField(choices=Categories.choices)

这里是我的序列化器

class OrderItemSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(required=False)
    category = serializers.CharField(source='get_category_display')

    class Meta:
        model = OrderItem
        fields = ['id', 'unit_price', 'category']
        read_only_fields = ['unit_price']

我怎样才能创建这样的模型?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    试试这个:

    from rest_framework import fields
    from your_app_path.models import Categories
    
    class OrderItemSerializer(serializers.ModelSerializer):
        category = fields.ChoiceField(Categories.choices)
    

    另一个注释。我不熟悉仅用于选择的子分类模型。我通常这样做:

    class OrderItem(TimeStampedModel):
        GRASS = 'grass'
    
        CATEGORY_CHOICES = (
            (1, _(GRASS)),
            )
    
    order = models.ForeignKey(Order, related_name='order_items', on_delete=models.CASCADE)
    unit_price = models.DecimalField(max_digits=6, decimal_places=2)
    category = models.IntegerField(choices=CATEGORY_CHOICES)
    

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 2014-09-21
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2016-04-22
      • 2019-04-26
      相关资源
      最近更新 更多