[英]How to get some of the UserModel fields into another Serializer
I have a model name Comment as follows.我有一个 model 名字评论如下。
class Comment(models.Model):
message = models.CharField(max_length=1000)
time = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='usercomment')
def __str__(self):
return self.sender.name
For this model, I have a serializer对于这个 model,我有一个序列化器
class CommentSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
time = serializers.DateTimeField(read_only=True)
message = serializers.CharField(read_only=True)
sender = serializers.PrimaryKeyRelatedField(read_only=True, many=False)
name = serializers.StringRelatedField(
source='sender', read_only=True, many=False)
I want to obtain avatar field from use model so I'm going with a new sterilizer to nest into comments我想通过使用 model 获取头像字段,所以我要使用一个新的消毒器来嵌套到评论中
class SenderInformation(serializers.Serializer):
avatar = serializers.ImageField(read_only=True)
And the main objective is to bring an avatar field linked to the sender, as I'm already getting the user id in send field and name as well but any other way to get a user avatar instead of nesting the few fields from the used model. ?主要目标是将头像字段链接到发件人,因为我已经在发送字段和名称中获取了用户 ID,但是任何其他获取用户头像的方式都不是嵌套使用过的几个字段 model .? How can I achieve this?
我怎样才能做到这一点?
Try StringRelatedField
.尝试
StringRelatedField
。 You are already using it to get the name of the sender, which is being extracted from the user model. So to get an avatar, you can do this:您已经在使用它来获取发件人的姓名,该姓名是从用户 model 中提取的。因此,要获取头像,您可以这样做:
avatar = serializers.StringRelatedField(source='sender.avatar', read_only=True, many=False)
So the full CommentSerializer
will look like this.所以完整的
CommentSerializer
看起来像这样。
class CommentSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
time = serializers.DateTimeField(read_only=True)
message = serializers.CharField(read_only=True)
sender = serializers.PrimaryKeyRelatedField(read_only=True, many=False)
avatar = serializers.StringRelatedField(
source='sender.avatar', read_only=True, many=False)
name = serializers.StringRelatedField(
source='sender', read_only=True, many=False)
You can learn by reading the docs as well.您也可以通过阅读文档来学习。
But there's is one issue with that, it will return the path as a string.但这有一个问题,它将路径作为字符串返回。 So You should use simple ImageField for this purpose.
因此,您应该为此目的使用简单的 ImageField。
avatar = serializers.ImageField(source='sender.avatar', read_only=True )
That should work Perfect.那应该工作完美。
Add a ImageField in your model:在您的 model 中添加一个 ImageField:
class Comment(models.Model):
message = models.CharField(max_length=1000)
time = models.DateTimeField(auto_now_add=True),
avatar = models.ImageField(),
sender = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='usercomment')
def __str__(self):
return self.sender.name
In your forms.py在你的 forms.py
from django import forms
class CommentForm(forms.Form):
message = forms.CharField(max_length=1000)
time = forms.DateTimeField(auto_now_add=True),
avatar = forms.ImageField()
You call it in your view as:在您看来,您将其称为:
f = CommentForm(request.GET)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.