Python 更改序列化程序类中的特定字段值

Python 更改序列化程序类中的特定字段值,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个这样的模型 class ProjectTemplate(models.Model): project_template_id = models.AutoField(primary_key=True) name = models.CharField(max_length=64) description = models.TextField(max_length=255) created_date = models.DateTimeField(auto_now

我有一个这样的模型

class ProjectTemplate(models.Model):
    project_template_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=64)
    description = models.TextField(max_length=255)
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)
    created_by = models.IntegerField(blank=True, null=True)
    modified_by = models.IntegerField(blank=True, null=True)
    activated = models.BooleanField(default=False)
    org_id = models.IntegerField(blank=False,null=False)

    class Meta:
        db_table = 'project_template'

    def __str__(self):
        return self.name
class ProjectTemplateSerializer(serializers.ModelSerializer): 
    class Meta:
         model = ProjectTemplate
还有一个像这样的序列化程序类

class ProjectTemplate(models.Model):
    project_template_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=64)
    description = models.TextField(max_length=255)
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)
    created_by = models.IntegerField(blank=True, null=True)
    modified_by = models.IntegerField(blank=True, null=True)
    activated = models.BooleanField(default=False)
    org_id = models.IntegerField(blank=False,null=False)

    class Meta:
        db_table = 'project_template'

    def __str__(self):
        return self.name
class ProjectTemplateSerializer(serializers.ModelSerializer): 
    class Meta:
         model = ProjectTemplate
在created_by字段中,我将用户id存储在数据库中,当列出项目模板时,基本上我将获得created_by字段的用户id

如何更改我的序列化程序类以获得这样的dict

{"user_id":id,"user_name":name}

对于像Sayse所说的由字段创建的,您最好为用户创建一个外键,如下所示:

create_by = models.ForeignKey("User", related_name="project_user")
然后,您可以通过以下方式从用户处访问信息,如用户名或其他信息:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("id", "user_name")

class ProjectTemplateSerializer(serializers.ModelSerializer): 
    user = UserSerializer(source="user", read_only=True)

    class Meta:
         model = ProjectTemplate
         fields = (
            "id", "user",
         )

正如Sayse所说,你最好像这样为用户制作一个外键:

create_by = models.ForeignKey("User", related_name="project_user")
然后,您可以通过以下方式从用户处访问信息,如用户名或其他信息:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("id", "user_name")

class ProjectTemplateSerializer(serializers.ModelSerializer): 
    user = UserSerializer(source="user", read_only=True)

    class Meta:
         model = ProjectTemplate
         fields = (
            "id", "user",
         )

为什么不为用户创建一个外键?好的,即使它是用户的外键,它也只会存储用户的主键字段值,对吗?那么怎么做呢?不。。。它提供了一种引用用户实例的方法。。文档中详细介绍了外键。不远的地方,它说一个
id
主键字段是自动为您提供的。是的,我实际上是在问如何更改序列化器类中的特定字段值。您的问题是一个副产品,因为您的模型首先设置不正确,修复模型使这个问题更容易修复。否则,任何解决方案都只是一个黑客,为什么不为用户创建一个外键呢?好的,即使它是用户的外键,它也只会存储用户的主键字段值,对吗?那么怎么做呢?不。。。它提供了一种引用用户实例的方法。。文档中详细介绍了外键。不远的地方,它说一个
id
主键字段是自动为您提供的。是的,我实际上是在问如何更改序列化器类中的特定字段值。您的问题是一个副产品,因为您的模型首先设置不正确,修复模型使这个问题更容易修复。否则,任何解决方案都只是一种手段