django - 在 Django Rest 框架中序列化/反序列化外键

标签 django django-rest-framework

我正在使用 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 填充新项目?

最佳答案

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 unique=True。

关于django - 在 Django Rest 框架中序列化/反序列化外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65539662/

相关文章:

python - 验证序列化器 Django Rest 框架中的外键字段

python - docker-compose的nginx和django设置

Python Django 在保存时编码法语重音字符,但 Django 管理可以正常工作

Django 评论应用程序 : How do I disable the redirection to posted. html?

django - 在创建 View 中迭代模型并返回内联表单集

Django REST framework 按字段分组并添加额外内容

Django + nginx + Gunicorn 给出 502 错误。日志信息很少

python - Django REST教程DEBUG=FALSE报错

python - 如何在 DRF 中组合/混合对象级别和用户级别权限?

django - 覆盖重新验证密码重置电子邮件问题