【问题标题】:Django serializing view for model and non model serilizer模型和非模型序列化程序的 Django 序列化视图
【发布时间】:2017-10-20 23:33:36
【问题描述】:

期望:

Expected output:
 { 

     "id": 123,
     "name": "abc",
     "body_measurement": 
           {
             "weight": 75,
             "bp": "normal,
             "bloodgroup": "A-positive",
           },
   }

models.py

class Health(models.Model):
     name = models.CharField(max_length=64, unique=True)
     body_measurment = JSONField(_('measurments'),dump_kwargs={'indent': 4})

serializer.py

   class HealthSerializer(serializers.ModelSerializer):

        class Meta:
            model = Health
            fields = '__all__'

   class MeasurementSerializer(serializer,Serializer):

        weight = serializer.IntegerField()
        bp = serializer.CharField()
        bloodgroup = serializer.CharField()

views.py

   class HealthViewSet(viewsets.ModelViewSet):
        queryset = Health.objects.all()
        serializer_class = HealthSerializer

如何在不添加模型的情况下将一组键值添加到 body_measurment 中。

【问题讨论】:

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


    【解决方案1】:

    在您的模型上使用JsonField 作为body_measurment 字段:

    class HealthSerializer(serializers.ModelSerializer):
        body_measurement = serializers.JsonField()
    
            class Meta:
                model = Health
                fields = '__all__'
    

    使用它,您可以在 body_measurement 字段中保存任何有效的 json

    在此处阅读有关 json 字段的信息:http://www.django-rest-framework.org/api-guide/fields/#jsonfield

    【讨论】:

    • 我如何连接 { "weight": 75, "bp": "normal, "bloodgroup": "A-positive", },在视图中并保存在 Healthmodel 中
    • 使用 json.dumps() 获取 dict 的 json 表示
    • class HealthViewSet(viewsets.ModelViewSet): queryset = Health.objects.all() serializer_class= HealthSerializer 如何在Viewset中添加
    • 怎么加什么?请编辑您的问题以提供更多详细信息。
    • Put (localhost:8000/health/123) { "weight": 75, "bp": "normal, "bloodgroup": "A-positive", },它应该更新为:{ "id": 123, "name": "abc", "body_measurement": { "weight": 75, "bp": "normal, "bloodgroup": "A-positive", }, }
    猜你喜欢
    • 2013-01-26
    • 2011-08-26
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多