如何在Django中序列化ManyToManyField?

问题描述

我想制作一个帖子模型,并向点击的人展示。因此,在创建模型和序列化程序之后,服务器将运行,并发生以下错误

TypeError:直接分配给多对多集的正向 被禁止。改用lik​​er.set()。

我认为该错误是在ManyToManyField的序列化过程中发生的,但我不知道解决方案。如何实现所需的功能?这是我的代码

models.py

class post (models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name='authorName',null=True)
    title = models.CharField(max_length=40)
    text = models.TextField(max_length=300)
    image1 = models.ImageField(blank=True,null=True)
    image2 = models.ImageField(blank=True,null=True)
    image3 = models.ImageField(blank=True,null=True)
    image4 = models.ImageField(blank=True,null=True)
    image5 = models.ImageField(blank=True,null=True)
    like = models.IntegerField(default=0)
    liker = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='liker',blank=True)
    tag1 = models.CharField(max_length=20,null=True)
    tag2 = models.CharField(max_length=20,null=True)
    tag3 = models.CharField(max_length=20,null=True)
    tag4 = models.CharField(max_length=20,null=True)
    tag5 = models.CharField(max_length=20,null=True)

class comment (models.Model) :
    author = models.ForeignKey(settings.AUTH_USER_MODEL,null=True)
    post = models.ForeignKey(post,on_delete=models.CASCADE)
    text = models.TextField(max_length=200)

class view (models.Model) :
    post = models.ForeignKey(post,on_delete=models.CASCADE)
    viewCnt = models.IntegerField(default=0)

serializers.py

class commentSerializer (serializers.ModelSerializer) :

    class Meta :
        model = comment
        fields = ['author','text']

class viewSerializer (serializers.ModelSerializer) :

    class Meta :
        model = view
        field = ['viewCnt']

class postSerializer (serializers.ModelSerializer) :
    author = serializers.CharField(source='author.username',read_only=True)
    image1 = serializers.ImageField(use_url=True,allow_null=True)
    image2 = serializers.ImageField(use_url=True,allow_null=True)
    image3 = serializers.ImageField(use_url=True,allow_null=True)
    image4 = serializers.ImageField(use_url=True,allow_null=True)
    image5 = serializers.ImageField(use_url=True,allow_null=True)
    comment = commentSerializer(many=True,read_only=True)
    view = viewSerializer(many=True,read_only=True)

    class Meta:
        model = post
        fields = ['pk','author','title','text','image1','image2','image3','image4','image5','like','liker','tag1','tag2','tag3','tag4','tag5','comment','view']

    def create (self,validated_data) :
        return post.objects.create(**validated_data)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)