2015-05-29 53 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