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



我正在使用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在其表中是唯一的]

我找到了这个链接,它解决了读取问题,但不适用于写入。

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')

精度:您需要使您的类别.name在您的模型中是唯一的.py.

最新更新