2011-02-25 64 views
1

我具有低於模型另一個目的的Django manyToManyField初始值:基於使用Formwizard

class DrawingRevision(models.Model): 
    revision = models.CharField(max_length = 10) 
    previous_revision = models.ForeignKey('self', blank=True, null=True) 
    drawing = models.ForeignKey(Drawing) 
    part = models.ManyToManyField(Part, blank=True, null=True) 

我有一個formWizard,其允許用戶選擇previous_revision。我希望在用戶進入formWizard的最後一頁時能夠獲得previous_revision中已經選擇的部分列表。我的想法是在DrawingRevision的ModelForm中執行此操作,但我不確定如何去做。

class DrawingRevisionForm(forms.ModelForm): 
    class Meta: 
     model = DrawingRevision 
     exclude = ('drawing','revision', 'previous_revision',) 
    def __init__(self, *args, **kwargs): 
     self(DrawingRevisoinForm, self).__init__(*args, **kwargs) 
     self.fields['revision_date'].widget = widgets.AdminDateWidget() 

感謝您的幫助!

編輯:

我做這個了一些進展。在我的formwizard類中,我定義了以下process_step方法。在我需要顯示設置了初始值的manytomany字段之前調用它。下面,'d'是上圖中的部分列表,nextform應該是要顯示的表單(儘管type(self.form_list [1])告訴我它是一個聲明性的fieldmeme類)。我需要做的是獲得零件列表(d)作爲下一頁零件字段的初始值。

def process_step(self, request, form, step):                                 
    if step == 1:                                       
     d = DrawingRevision.objects.filter(id__exact=request.POST['0-prerev'])[0].part.all()                     
     nextform = self.form_list[1] 

編輯2: 我正在做這個多一點的進步。我想,我需要的DrawingRevision形式的初始成員設置是這樣的:在parse_params

nextform.initial = {'part': [DrawingRevision.objects.filter(id__exact=request.POST['0-prerev'])[0].part.all()], } 

可能()。但是當我這樣做的時候,最後的形式並沒有選擇初始值,而是取消了所有的選擇。

回答

0

我parse_params()加入這個和它的工作!:

if request.method == 'POST' and current_step == 1: 
    form = self.get_form(current_step, request.POST) 
     if form.is_valid(): 
      self.initial[(current_step + 1)] = {'part': DrawingRevision.objects.filter(id__exact=request.POST['0-prerev'])[0].part.all(), } 

我希望有人認爲這是有用的。