Skip to main content
 首页 » 编程设计

python之在 rest framework django 中添加 many=True 后出现属性错误

2024年08月23日29dudu

class CommentSerializer(serializers.ModelSerializer): 
 
 
    class Meta: 
 
        model = Comment 
        fields=('Comment','Comment_text','Comment_time','Comment_Post','Comment_User', ) 
 
class PostSerializers(serializers.ModelSerializer): 
    comment = CommentSerializer(many=True) 
 
    class Meta: 
    model = Postovo 
    fields = ('Postovo_id','Postovo_trending','comment', ) 

模型是这样的

class Postovo(models.Model): 
 
Postovo_id = models.AutoField(primary_key=True) 
Postovo_type = models.ForeignKey(Type, related_name='posttype' ,default='1', editable=True) 
Postovo_time = models.CharField(max_length=100,default=currentTimestamp, editable=True) 
Postovo_link1 = models.CharField(max_length=1000,default='linkofimage1', editable=True) 
Postovo_link2 = models.CharField(max_length=1000,default='linkofimage2', editable=True) 
Postovo_person1=models.CharField(max_length=100,default='person1', editable=True) 
Postovo_person2=models.CharField(max_length=100,default='person2', editable=True) 
Postovo_hot=models.CharField(max_length=100,default='False', editable=True) 
Postovo_trending=models.CharField(max_length=100,default='False', editable=True) 
 
 
def __str__(self): 
    return '%s' % (self.Postovo_id) 

下一步

class Comment(models.Model): 
 
Comment = models.AutoField(primary_key=True) 
Comment_text = models.CharField(max_length=100) 
Comment_time = models.CharField(max_length=100,default=currentTimestamp) 
Comment_Post = models.ForeignKey(Postovo, related_name='commentpost' ,default='1', editable=True) 
Comment_User = models.ForeignKey(RegUser, related_name='commentuser' ,default='1', editable=True) 
def __str__(self): 
    return '%s' % (self.Comment)   

在 View 中

class Postcomment(viewsets.ModelViewSet): 
 
queryset = Postovo.objects.all() 
serializer_class = PostSerializers 

错误

AttributeError: Got AttributeError when attempting to get a value for field comment on serializer PostSerializers. The serializer field might be named incorrectly and not match any attribute or key on the Postovo instance. Original exception text was: 'Postovo' object has no attribute 'comment'.

请您参考如下方法:

您需要在 PostSerializers 中使用相关名称 commentpost 而不是 comment。

class PostSerializers(serializers.ModelSerializer): 
    commentpost = CommentSerializer(many=True) 
 
    class Meta: 
    model = Postovo 
    fields = ('Postovo_id','Postovo_trending','commentpost', ) 

出现错误是因为 Postovo 实例上没有 comment 属性。获取所有相关 Comment 实例的管理器可以使用 related_name commentpost 访问。