我具有低於模型另一個目的的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()], }
可能()。但是當我這樣做的時候,最後的形式並沒有選擇初始值,而是取消了所有的選擇。