【问题标题】:POST ManytoMany relationship in Django Rest Framework在 Django Rest Framework 中发布多对多关系
【发布时间】:2022-02-10 03:52:41
【问题描述】:

我与 Book 模型和 Genres 有多对多关系,当我尝试获取数据但尝试发布与输出类似但我不断收到此错误时,以下代码工作正常

The `.create()` method does not support writable nested fields by default.
Write an explicit `.create()` method for serializer `pages.serializes.BookSerial`, or set `read_only=True` on nested serializer fields.

models.py

class Book(models.Model):
    title =  models.CharField(max_length=100)
    description  =  models.TextField(max_length=4000)
    alternative_name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    blacklist =  models.BooleanField(default=False)

class Genres(models.Model):
    name =  models.CharField(max_length=200)
    book = models.ManyToManyField(Book,related_name="bookgenres")
    def __str__(self):
        return self.name

serialazer.py

class GenreSerial(serializers.ModelSerializer):
    class Meta:
        model =  Genres
        fields  = ['name']


class BookSerial(serializers.ModelSerializer):
    genre =  GenreSerial(source="bookgenres",many=True)


    class Meta:
        model =  Book
        fields = '__all__'

views.py

class AllSerialed(generics.ListCreateAPIView):
    queryset = Book.objects.filter(blacklist=False).order_by("-date")
    serializer_class = BookSerial

【问题讨论】:

    标签: python django-rest-framework


    【解决方案1】:

    您必须扩展 BookSerial 并定义一个 create 方法。在创建方法中,首先将书籍对象保存为

    bookobject= books.objects.create(passData), 
    

    然后将流派创建为

    Genreobject = Genres.objects.creae(data) 
    

    (此数据不应包含账面价值),然后执行类似 -

    Genreobject.book.add(bookobject)
    

    【讨论】:

    • 没有写完整的代码:) :)
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2020-08-15
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多