Начальное значение Django manyToManyField на основе другого объекта с помощью Formwizard - PullRequest
1 голос
/ 25 февраля 2011

У меня есть модель ниже:

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 (). Но когда я это сделаю, начальные значения не будут выбраны в последней форме, а скорее, все будет снято.

1 Ответ

0 голосов
/ 02 марта 2011

Я добавил это в 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(), }

Надеюсь, кто-нибудь найдет это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...