简体   繁体   English

如何将一些 UserModel 字段放入另一个 Serializer

[英]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.

相关问题 有什么方法可以将一些特定字段从序列化程序获取到另一个序列化程序? - Is there any way to get some specific fields from a serializer to another serializer? 如何让 UserProfile 引用来自 UserModel 的字段? - How to get UserProfile to reference the fields from UserModel? 仅显示获取 api 响应 django 序列化程序中的某些字段 - display only some fields in get api response django serializer 如何将序列化程序中的字段获取到 ListView 中进行过滤 - How to get fields from Serializer into ListView for filtering 如何将模型字段嵌套在序列化程序的另一个键下 - How to nest models fields under another key for serializer Django rest 框架:将一个 model 的一些字段与另一个混合并制作序列化器 - Django rest framework: mixing some fields of one model with another and make a serializer 如何在APIView中获取序列化器字段? - How can I get the serializer-fields in APIView? 扩展组模型的嵌套序列化器缺少用户序列化器中的某些字段 - The nested serializer of extended group model is missing some fields in the user serializer 如何通过 DRF 序列化程序获取必填字段作为 json 列表 - How to get required fields as a list of json by DRF serializer Django REST | 全局排除序列化程序中的某些字段 - Django REST | Globally exclude some fields in serializer
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM