【问题标题】:django filter on max_lengthmax_length 上的 django 过滤器
【发布时间】:2015-05-29 08:29:40
【问题描述】:

嗨,有没有办法在 Django 中过滤字段属性而不是字段值?

例如,对于我的 GUI 布局,我想知道按 max_length 排序的字段的顺序。我的模型:

class Person(models.Model):
    name1 = models.CharField(max_length=220, default="")
    name2 = models.CharField(max_length=90, default="")
    name3 = models.CharField(max_length=30, default="")
    name4 = models.CharField(max_length=130, default="")
    name5 = models.CharField(max_length=10, default="")

我希望能够找到模型中最长 CharField 的长度,在本例中为 220。我该怎么做?

这只是一个简化的示例,但与我需要的功能相似。为了深入了解我所面临的现实情况:我向我的模型“gui_serial_number”添加了一个自定义属性,我有部分静态模型,其字段如下:

a = CharField(gui_serial_number=10...)
b = CharField(gui_serial_number=20...)
....
n = CharField(gui_serial_number=50...)

我制作了一个动态界面,可以在其中动态地将字段添加到模型中(使用 type() 和 add_to_class() 等),并且用户可以在 GUI 中指定字段应该放置的位置。当没有给出 gui_serial_number 时,我希望能够自动将 gui_serial_number 定义为“max+10”。

【问题讨论】:

    标签: python django python-3.x django-models


    【解决方案1】:

    也许不漂亮,但是要找到Person的最长CharField的长度可以这样做:

    from operator import attrgetter
    sorted([field for field in Person._meta.fields if isinstance(field, models.CharField)],
            key=attrgetter('max_length'))[-1].max_length
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2015-08-31
      • 2017-10-09
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2014-01-30
      相关资源
      最近更新 更多