У меня есть модель ниже:
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. Я хотел бы иметь возможность выбрать список частей из предыдущего_решения, уже выбранный, когда пользователь перейдет на последнюю страницу мастера формы. Я думаю сделать это в ModelForm для 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()
Спасибо за вашу помощь!
EDIT:
Я добился определенного прогресса в этом. В моем классе formwizard у меня определен следующий метод process_step. Он вызывается как раз перед тем, как мне нужно отобразить поле manytomany с установленными начальными значениями. Ниже, 'd' - это список деталей из предыдущего чертежа, а nextform должна быть отображаемой формой (хотя тип (self.form_list [1]) говорит мне, что он является декларативным полем метаданных). Что мне нужно сделать, так это получить список частей (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 (). Но когда я это сделаю, начальные значения не будут выбраны в последней форме, а скорее, все будет снято.