返回另一个模型的字段作为对POST请求的响应

时间:2019-06-17 18:53:33

标签: django django-rest-framework

在我的models.py中,有两种模型:

class Genre(models.Model):
    genre_id = models.CharField(max_length=10)
    name = models.CharField(max_length=40)
    information = models.CharField(max_length=120)

    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    genre = models.ForeignKey(Genre, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

它们已序列化:

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('title', 'author', 'genre')


class GenreSerializer(serializers.ModelSerializer):
    class Meta:
        model = Genre
        fields = ('name', 'information')
为每个创建

ViewSets

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer


class GenreViewSet(viewsets.ModelViewSet):
    queryset = Genre.objects.all()
    serializer_class = GenreSerializer

我想做的是:

  1. POST端点发送一个books/请求。发送的数据必须包含现有的类型ID,否则将不会保存到数据库中(默认情况下已经完成)。
  2. information模型接收Genre作为响应。

让我举一个简短的例子:

  1. 我正在发送此JSON:

    { "title": "Hercules Poirot", "author": "Agatha Christie", "genre": 1 }

  2. 我收到的不是这样的重复请求:

    { "genre": "crime story" }

该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以做的是在create内添加自定义BookViewSet方法,以覆盖return语句。

您可以举例说明在createhttps://github.com/encode/django-rest-framework/blob/master/rest_framework/mixins.py#L12)中实现的默认CreateModelMixin方法

答案 1 :(得分:0)

您可以说出嵌套字段将如何工作。像这样:

class GenreSerializer(serializers.ModelSerializer):
    class Meta:
        model = Genre
        fields = ('name', 'information')


class BookSerializer(serializers.ModelSerializer):
    genre = GenreSerializer(read_only=True)

    class Meta:
        model = Book
        fields = ('title', 'author', 'genre')
相关问题