2011-12-13 39 views
6

Tôi có biểu mẫu nhập dữ liệu vào db. Tôi có một biểu mẫu khác có trường thả xuống sử dụng dữ liệu được nhập bởi biểu mẫu đầu tiên.Dữ liệu tải lại biểu mẫu Django

Vì vậy, khi tôi gửi dữ liệu từ biểu mẫu đầu tiên, db được cập nhật đúng. Nhưng khi tôi tải biểu mẫu thứ hai, trình đơn thả xuống không được cập nhật với dữ liệu mới nhất.

bước sau để gỡ lỗi

Vấn đề không phải là với giao dịch/cam, vv Các truy vấn để lấy dữ liệu cho danh sách thả xuống ở dạng thứ hai là đúng.

Vấn đề không phải là có tầm nhìn bộ nhớ cache hoặc (cos chúng tôi không có bất kỳ trung gian bộ nhớ cache) Tôi cũng đã thử trang trí bộ nhớ cache như @ never_cahce, @ cache_control vv

tôi đã cố gắng đưa ra một tuyên bố in ở dạng thứ hai . Tôi tin rằng vấn đề là với bộ nhớ cache biểu mẫu. Mọi biểu mẫu django chỉ được tải một lần, tức là. trong khi tải trang đầu tiên của trang web. Sau đó biểu mẫu được tải từ bộ nhớ cache này.

Trang đầu

dạng

class AddOrganization(forms.Form): 

    orgList = getOrgUnitList()  

    orgUnit = forms.CharField(label=u'Organization Name', 
           max_length=50, 
           error_messages={'required':'Organization name is required field.'}) 

    parentOrg= forms.ChoiceField(label=u'Parent Organization', 
          choices=[(u'Select',u'Select')]+orgList, 
          error_messages={'required':'Organization name is required field.'}) 

trang Second

dạng

class AddUser(forms.Form):  

    orgUnitList = getOrgUnitList()   

    email = forms.EmailField(label=u'Email', 
          max_length=50, 
          error_messages={'required':'Email is required field'}) 

    orgUnit = forms.ChoiceField(label=u'Organizational Unit', 
         choices=orgUnitList,       
           error_messages={'required':'Organizational unit is required field'})  

Query

def getOrgUnitList(): 
    orgUnitList = list(OrganizationUnit.objects.values_list('OrgUnitID','OrgUnitName').order_by('OrgUnitName')) 
    return orgUnitList 

EDIT

Mọi thứ đều tốt nếu tôi sử dụng modelforms.Why Thì sao?

+0

Bạn có thể cho chúng tôi thấy một số mẫu mã không. N.B. Bạn sẽ phải tải lại/lấy dữ liệu từ db từ biểu mẫu đầu tiên mà bạn cần hiển thị trong menu thả xuống của biểu mẫu thứ hai của bạn. – c4urself

+0

Chúng tôi chỉ là những người chết - vui lòng cung cấp mã thực hoặc nếu không, chúng tôi chỉ đang phỏng đoán vấn đề. Truy vấn này chính xác ở đâu? Bạn có tích cực nó đang được thực hiện? Ngay cả khi bạn tích cực, hãy cho chúng tôi xem! –

Trả lời

6

Sự cố là khai báo orgUnitList làm thuộc tính lớp trong biểu mẫu. Điều này có nghĩa là nó được gọi một lần, khi hình thức ban đầu được xác định. Vì vậy, không có phần tử mới nào được nhìn thấy, cho đến khi quá trình máy chủ khởi động lại.

Một cách để sửa lỗi này sẽ được gọi getOrgUnitList chức năng bên trong phương pháp __init__ dạng:

class AddOrganization(forms.Form): 
    ... 
    def __init__(self, *args, **kwargs): 
     super(AddOrganizationForm, self).__init__(*args, **kwargs) 
     self.fields['orgUnit'].choices = getOrgUnitList() 

Ngoài ra, bạn nên xem xét sử dụng ModelChoiceField cho đơn vị tổ chức, vì nó giao dịch với các loại điều này tự động.

+0

Cảm ơn bạn. (\ * _ \ *) – Jibin

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