无论谁在阅读本文,希望您一切都好。 我正在创建一个社交媒体应用程序,其中包含与其他社交媒体网站一样的帖子,喜欢和评论,我正尝试通过序列化程序将数据从后端发送到前端,我遇到的问题是我不是能够获得全部数据但部分数据的输出。以下表示我要序列化的对象的models.py
class User(AbstractUser):
contact_no = models.CharField(max_length=15,null=True,blank=True)
profile_picture=models.ImageField(upload_to=to_upload,default="defaultprofile.jpg")
class Post(models.Model):
posted_by=models.ForeignKey(User,on_delete=models.CASCADE)
date= models.DateField(auto_now=True)
time=models.TimeField(auto_now=True)
content=models.CharField(max_length=2000)
media=models.ImageField(default=None,blank=True,upload_to=to_upload_post)
class Like(models.Model):
Liked_by=models.ForeignKey(User,on_delete=models.CASCADE,related_name="likes")
post=models.ForeignKey(Post,on_delete=models.CASCADE)
date = models.DateField(auto_now=True)
time = models.TimeField(auto_now=True)
和我正在使用的序列化器是
class UserSerializer(serializers.ModelSerializer):
class Meta:
model=User
fields=['id','username','first_name','last_name','profile_picture']
class LikeSerializer(serializers.ModelSerializer):
Liked_by=UserSerializer()
class Meta:
model=Like
fields=['Liked_by']
class PostSerializer(serializers.ModelSerializer):
posted_by=UserSerializer()
likes=LikeSerializer(many=True)
class Meta:
model=Post
fields=['posted_by','id','content','date','time','media','likes']
这在导入时不会引发任何错误,但不能提供完整的数据。
我得到的输出是
{
'posted_by':
OrderedDict([
('id', 7),
('username', 'user'),
('first_name', ''),
('last_name', ''),
('profile_picture', '/media/defaultprofile.jpg')]),
'id': 4,
'content': 'This is a test post for likes',
'date': '2020-10-22',
'time': '05:34:55.979863',
'media': None
}
但是我想要得到的是
{
'posted_by':
OrderedDict([
('id', 7),
('username', 'user'),
('first_name', ''),
('last_name', ''),
('profile_picture', '/media/defaultprofile.jpg')]),
'id': 4,
'content': 'This is a test post for likes',
'date': '2020-10-22',
'time': '05:34:55.979863',
'media': None
'likes':
['Liked_by':
OrderedDict([
('id', 1),
('username', 'user1'),
('first_name', ''),
('last_name', ''),
('profile_picture', '/media/defaultprofile.jpg')
]
)
}
任何线索,帮助或任何战略建议将不胜感激。
答案 0 :(得分:1)
尝试以与“ Liked_by”字段相同的方式设置related_name:
post=models.ForeignKey(Post,on_delete=models.CASCADE, related_name='likes')
不幸的是,django rest框架掩盖了某些异常,因为它试图捕获包括AttributeError
在内的某些异常以执行字段存在性检查。
答案 1 :(得分:0)
几件事要注意:
示例:
class LikeSerializer(serializers.ModelSerializer):
Liked_by = serializers.SerializerMethodField()
class Meta:
model=Like
fields=['Liked_by']
def get_Liked_by(self, instance):
return UserSerializer(instance.Liked_by, many=False).data