我有以下模型:
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)
我有一个表单向导,允许用户选择previous_revision。我希望能够在用户到达formWizard的最后一页时选择previous_revision中的部分列表。我的想法是在ModelForm for DrawingRevision中这样做,但我不确定如何去做。
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])告诉我它是一个declarativefieldsmetaclass)。我需要做的是将部分列表(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表单的初始成员设置为:
nextform.initial = {'part': [DrawingRevision.objects.filter(id__exact=request.POST['0-prerev'])[0].part.all()], }
可能在parse_params()中。但是当我这样做时,在最后一个表单上没有选择初始值,而是取消选择所有内容。
答案 0 :(得分: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(), }
我希望有人觉得这很有用。