2012-12-03 59 views
0

我有一个modelform和im为其表单创建附加字段(模型中不存在)。django模型及其附加字段及其顺序

我知道你可以对模型中的字段进行重新排序,就像它在the docs中说的那样。

但问题是 - 我想额外的领域被呈现在其他领域之前。

是否有可能在呈现之前以某种方式重新排列表单的字段?表单对象如何跟踪其字段顺序?

Alan

回答

1

无论如何。看来我已经找到了答案,这似乎是诀窍,因为我已经添加了2个附加字段:

def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 

     self.build_fields() 
     l = len(self.fields.keyOrder) 
     for i in range(0,2): 
      f = self.fields.keyOrder[l-1] 
      self.fields.keyOrder.pop(l-1) 
      self.fields.keyOrder.insert(0, f) 

以上是我的初始修复程序。后来我发现它并没有再减少。然后,我这样做:

class AlertForm(forms.ModelForm): 
    class Meta: 
     model = Message 
     fields = model_fields 

    def __init__(self, *args, **kwargs): 
     super(AlertForm, self).__init__(*args, **kwargs) 

     self.build_fields() 
     newKeyOrder = [] 
     newKeyOrder.append('field_that_had_to_be_first') 
     if typechange: 
      newKeyOrder.append('field_thats_sometimes_necessary') 
     newKeyOrder += model_fields 
     self.fields.keyOrder = newKeyOrder 
-1

的字段属性的你ModelForm`s Meta class定义的字段显示以及以何种顺序。

使用ModelForm的内部Meta类的fields属性。该属性(如果给出)应该是要包含在表单中的字段名称列表。在表单呈现时,尊重该列表中指定字段名称的顺序。

+0

没有。在我问这个问题之前试过了。如果您在字段名称中包含模型本身不包含的字段名称,则会引发错误。 –

+0

您可以请发布定义您的表单的代码吗? –

+0

我投下了这个,因为你的回答没有解决他的问题,这是显示未在模型中定义的其他字段。 –