2015-05-29 73 views
1

嗨有没有一种方法来过滤字段属性,而不是Django中的字段值?django过滤max_length

例如,对于我的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”。

回答

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