【问题标题】:Django json serializer with different fields具有不同字段的 Django json 序列化程序
【发布时间】:2020-04-28 15:45:42
【问题描述】:

我有一个 json {{"cosmetics":["perfume1","scent2","cream1"]},{"cosmetics":["perfume2","perfume1","cream2","cream1"]}}

我必须保存化妆品的模型分为两个字段creamperfumes 我有两套所有可用的香水和面霜如下

PERFUME = {"prefume1", "perfume2", "scent1"}
CREAM = {"cream1", "cream2"}

我的模型如下

class X(models.Model):
    perfume = ListTextField(base_field=models.CharField(max_length=20))
    cream = ListTextField(base_field=models.CharField(max_length=20))

我的问题是,如何编写一个序列化器来匹配上面的模型和给定的 json? (我想将数据从 json 保存到 db) 提前谢谢你。

【问题讨论】:

  • 无法将 json 发送为 {"PERFUME": [], CREAM:[]}
  • 不,应该将给定的“化妆品”分开

标签: json serialization django-models django-rest-framework deserialization


【解决方案1】:

找到了。我必须编辑我的模型以及序列化程序。 从序列化程序中,我排除了 perfumescream 字段。向模型添加了 cosmetics 字段。 更改模型的save()方法,设置perfumescream的值

我的最终代码如下

class X(models.Model):
    perfume = ListTextField(base_field=models.CharField(max_length=20))
    cream = ListTextField(base_field=models.CharField(max_length=20))
    cosmetics= ListTextField(base_field=models.CharField(max_length=20))
    def save(self, *args, **kwargs):
        self.perfume= list(set(self.cosmetics) & PERFUMES)
        self.vegetables = list(set(self.cosmetics) & CREAMS)
        super(X, self).save(*args, **kwargs)

Serializer.py 如下所示

class StringListField(serializers.ListField):  # to save a list field
   child = serializers.CharField()

class XSerializer(serializer.(serializers.ModelSerializer):
    cosmetics= StringListField()
    class Meta:
        model = X
        exclude = ("perfume", "cream")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2019-01-17
    相关资源
    最近更新 更多