2013-09-25 39 views
6

Tôi có một lược đồ biểu mẫu kế thừa từ một lược đồ biểu mẫu khác. Cả hai đều có fieldsets. Tuy nhiên, các fieldets được đặt theo thứ tự chúng được tạo ra. Vì vậy, fieldset được mô tả trong lược đồ cuối cùng sẽ là trường cuối cùng. Tôi muốn nó là người đầu tiên. Có cách nào làm được việc này không ?Làm cách nào để thay đổi thứ tự các trường?

Ví dụ:

from plone.supermodel import model 
from zope import schema 

class FormSchema(model.Schema): 
    model.fieldset(
      'test', 
      label='Test', 
      fields=['field1'] 
    ) 
    field1 = schema.Text(title=u'test') 


class FormSchema2(FormSchema): 
    # Is last but I would like to place it first 
    model.fieldset(
      'test2', 
      label='Test2', 
      fields=['field2'] 
    ) 
    field2 = schema.Text(title=u'test2') 
+1

Tôi không chắc liệu nó có hoạt động hay không, nhưng bạn có thể thử khai báo từng fieldset trong lớp riêng của nó và trộn chúng trong một thứ ba theo đúng thứ tự. Ví dụ: 'lớp FormSchemaFinal (FormSchemaFieldset2, FormSchemaFieldset1):' – tcurvelo

Trả lời

2

Bạn có thể không, tôi sợ. Các trường lược đồ là luôn luôn được hợp nhất theo thứ tự độ phân giải giao diện ngược; cơ sở trước giao diện có nguồn gốc. Khai báo fieldset một lần nữa trên lược đồ FormSchema2 sẽ chỉ dẫn đến trường dữ liệu được liệt kê hai lần.

Nếu bạn để kiểm soát thứ tự trường, không lấy được từ giản đồ cơ sở nhưng khai báo lại.

+0

Câu trả lời này, tất nhiên, không chính xác 100%. Bạn có thể bẻ khóa crap ra khỏi giao diện zope bằng cách thao tác thủ công nội bộ của chúng. Nhưng bạn không muốn làm điều này :) –

+1

@Mikko: bạn có thể đặt các giá trị được gắn thẻ bằng phương thức 'setTaggedValue()' trên lược đồ cơ sở. Hoặc monkeypatch 'plone.supermodel' hoặc' plone.autoform'. Nhưng điều đó có thể phá vỡ giản đồ cơ sở hoặc yêu cầu kiến ​​thức thân mật về hai khung công tác và sẽ cực kỳ mong manh. –

Các vấn đề liên quan