【问题标题】:Serializing/deserializing a foreign key in django rest framework在 django rest 框架中序列化/反序列化外键
【发布时间】:2021-04-08 21:18:04
【问题描述】:

我正在使用 Django REST 框架来创建 API。假设我有以下模型:

class Category(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name


class Item(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, related_name='items')

    def __unicode__(self):
        return self.name

我想为 Item 编写一个序列化程序,使其在序列化(即读取)期间返回“category_name”,然后在反序列化(即写入)期间返回“category_name”并将其转换为类别[您可以假设 category_name 是在其表中独一无二]

我找到了this link,它解决了读取问题,但不适用于写入。

class ItemSerializer(serializers.ModelSerializer):
    category_name = serializers.CharField(source='category.name')

    class Meta:
        model = Item
        fields = ('id', 'name', 'category_name')

有没有办法对其进行修改,使其可用于通过 API 填充新项目?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    SlugRelatedField 是您正在寻找的。这既是读又是写。

    class ItemSerializer(serializers.ModelSerializer):
        category = serializers.SlugRelatedField(
            slug_field='name',
            queryset=Category.objects.all()
         )
    
        class Meta:
            model = Item
            fields = ('id', 'name', 'category')
    

    精度:您需要在您的 models.py 中使您的 category.name 唯一=True。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2014-07-30
      相关资源
      最近更新 更多