【问题标题】:How to add variable in Django model如何在 Django 模型中添加变量
【发布时间】:2020-05-30 06:52:27
【问题描述】:

我想在 Django 模型中添加变量,我不想将它保存到数据库中,同时我想在调用端点时将此变量返回给用户。

这是我在网上找到的,但问题是变量没有重新运行给用户

class User (models.Model):
   f_name = models.CharField(max_length=255)
   l_name = models.CharField(max_length=300)
   full_name = ''

用户调用api时如何重新运行全名?

【问题讨论】:

标签: python django django-models django-rest-framework django-views


【解决方案1】:

如果这是使用 Django Rest Framework,我不知道您的代码是如何设置的,但您需要扩展您的序列化程序:

向序列化程序添加一个新字段:full_name = serializers.SerializerMethodField()

向序列化器添加一个方法:

def get_full_name(self, obj):
    return "{} {}".format(obj.first_name, obj.last_name)

注意: 有很多不同的方法可以将这些字符串连接在一起,在您的模型中使用 @property,fstrings 等 - 由您选择最适合您的需要(无需查看其余代码()

【讨论】:

  • 有没有办法改变视图集中的全名而不是序列化器?
  • 你需要它如何改变?
  • 我需要根据用户信息为用户添加前缀我需要检查其他字段而不是更改它。
【解决方案2】:

你可以定义模型的property:

class User (models.Model):
   f_name = models.CharField(max_length=255)
   l_name = models.CharField(max_length=300)

   @property
   def full_name(self):
       return self.f_name + self.l_name

现在您使用 full_name 的方式与普通属性 user.full_name 相同。

【讨论】:

  • 当我调用 API 时如何重新运行给用户?
  • @prg.dev 你到底尝试了什么?你有什么错误吗?
  • 如果你在模板端使用用户写 {{ user.full_name }} 它将返回登录用户的全名或者你在视图中使用用户然后写 request.user .full_name 无论何时使用 django 默认用户和扩展,如果你不使用 django 默认用户编写手册
  • 没有错误。当用户转到 ``` localhost:8000/api/userinfo ``` 我需要在 API 响应中返回 f_name、l_name、full_name... 它只给我 f_name 和 l_name
  • @prg.dev 我认为您需要将full_name 添加到序列化程序的字段列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2017-08-29
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多