当前位置: 首页 > 面试题库 >

在order_by()中使用Django自定义模型方法属性

乜业
2023-03-14
问题内容

我目前正在学习Django,我的一些模型具有自定义方法来获取以特定方式格式化的值。是否可以使用order_by()在模型中定义为属性的这些自定义方法之一的值?

这是一个演示该属性如何实现的示例。

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(blank=True, verbose_name='e-mail')

    def _get_full_name(self):
        return u'%s %s' % (self.first_name, self.last_name)
    full_name = property(_get_full_name)

    def __unicode__(self):
        return self.full_name

使用此模型,我可以执行以下操作:

>>> Author.objects.all()
[<Author: John Doh>, <Author: Jane Doh>, <Author: Andre Miller>]
>>> Author.objects.order_by('first_name')
[<Author: Andre Miller>, <Author: Jane Doh>, <Author: John Doh>]

但是我不能:

>>> Author.objects.order_by('full_name')
FieldError: Cannot resolve keyword 'full_name' into field. Choices are: book, email, first_name, id, last_name

在这样的自定义属性上使用order_by的正确方法是什么?


问题答案:

不,你不能那样做。order_by是在数据库级别应用的,但是数据库对你的自定义Python方法一无所知。

你可以使用单独的字段进行排序:

Author.objects.order_by('first_name', 'last_name')

或在Python中进行排序:

sorted(Author.objects.all(), key=lambda a: a.full_name)


 类似资料:
  • 问题内容: 我有一个模特。带外键的汽车,例如。所有者,可以空白,也可以不空白。汽车有一个creation_date。 我想按日期订购这些汽车,但是如果汽车有所有者,则必须以所有者的出生日期代替汽车的creation_date。 这可能吗? 问题答案: 看看这个类似的问题:对查询集进行排序的好方法吗?-Django 您不能使用模型的元数据,因为它仅接受一个字段 https://docs.django

  • 本文向大家介绍Django中自定义模型管理器(Manager)及方法,包括了Django中自定义模型管理器(Manager)及方法的使用技巧和注意事项,需要的朋友参考一下 1.自定义管理器(Manager) 在语句Book.objects.all()中, objects 是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个manager,你可以创建

  • 问题内容: 用自定义字段扩展User模型(与Django的身份验证应用程序捆绑在一起)的最佳方法是什么?我也可能希望使用电子邮件作为用户名(用于身份验证)。 问题答案: 做到这一点确实是Django推荐的方法是通过属性。 扩展现有的用户模型 … 如果你希望存储与相关的信息,则可以对包含其他信息字段的模型使用一对一关系。这种一对一模型通常称为配置文件模型,因为它可能存储有关站点用户的与身份验证无关的

  • 问题内容: 扩展Django的默认用户 如果你对Django的用户模型完全满意,并且只想添加一些其他配置文件信息,则可以简单地子类化并添加自定义配置文件字段。此类提供默认用户的完整实现,作为抽象模型。。我创建了一个新模型,如下所示: 这在admin中几乎像Django的standard一样显示。但是,admin中最重要的区别是不存在password-(re)set字段,而是显示了普通的CharFi

  • 更新(阅读后传递额外的属性到maven原型:生成): 我创造了自己的原型。src/main/资源/原型资源/pom.xml: 想要使用我自己的第三方deps工件和第三方deps版本参数。所以我添加了src/main/resources/META-INF/maven/archetype元数据。xml文件: 将archetype安装到我的本地存储库中。然后根据我的自定义原型创建工件: mvn原型:生成

  • 问题内容: 我有一个带有开始和结束日期范围的Django模型。我想强制执行验证,以便没有两个记录具有重叠的日期范围。最简单的实现方式是什么,这样我就不必重复编写逻辑了? 例如,我不想在Form 和 a 以及 admin表单中重新实现此逻辑, 并且 模型被重写。 据我所知,Django在全球范围内强制执行这些类型的条件并不容易。 Googling并不是很有帮助,因为“模型验证”通常是指验证特定的模型