在django rest框架中序列化/反序列化外键

在django rest框架中序列化/反序列化外键,django,django-rest-framework,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 =

我正在使用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
我想为项编写一个序列化程序,使其在序列化(即读取)期间返回“category_name”,但在反序列化(即写入)期间也返回“category_name”,并将其转换为category。[您可以假设category_name在其表中是唯一的]

我能够找到解决读取问题但不适用于写入的方法

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

    class Meta:
        model = Item
        fields = ('id', 'name', 'category_name')
有没有办法修改它,使它可以通过API填充新项目?

就是您要找的。这既是读也是写

class ItemSerializer(serializers.ModelSerializer):
    category = serializers.SlugRelatedField(
        slug_field='name',
        queryset=Category.objects.all()
     )

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

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

这非常有效,非常感谢!