【问题标题】:Django autocomplete a foreign key field with a previous value (Forms)Django 使用以前的值自动完成外键字段(表单)
【发布时间】:2018-07-30 23:50:46
【问题描述】:

我使用form wizard 创建基于 2 个模型的多步骤表单。

models.py:

class Author(models.Model):
    refCode = models.IntegerField(unique=True)
    lastName = models.CharField(max_length=20)
    firstName = models.CharField(max_length=20)
    birthDate = models.DateField()
    description = models.TextField()
    style = models.ForeignKey(Style)


class Book(models.Model):
    refCodeAuthor = models.ForeignKey(Author)
    title = models.CharField(max_length=100)
    summary = models.TextField()

view.py:

class AuthorWizard(SessionWizardView):
    form_list = [AuthorForm, DescriptionForm, BookForm] 
    def done(self, form_list, form_dict, **kwargs):
        form_values={}
        for form in form_list:
            form_values.update(form.cleaned_data)
        auth = Author(**form_values)
        auth.save()


        return render(self.request, 'done.html', {
            'form_values':form_values,
        })

我有3个步骤,对应form_list

AuthorForm

DescriptionForm

BookForm

当我在BookForm 上时,我不想显示refCodeAuthor,而是在步骤AuthorForm 中使用refCode 的值自动填充此字段。 用户创建一个作者,然后他添加他的书。他不必选择refCodeAuthor,尽管它不在同一个型号中。

我怎样才能做到这一点?

【问题讨论】:

    标签: django django-models django-forms django-views django-formwizard


    【解决方案1】:

    您可以在 AuthorWizard 类中使用 get_form 方法:

    def get_form(self, step=None, data=None, files=None):
        form = super(AuthorWizard, self).get_form(step, data, files)
        if step is None:
            step = self.steps.current
        if step == '3':
            #and here change the field of the form:
            form.fields['refCodeAuthor'] = self.get_cleaned_data_for_step('1')['refCode']
    

    另一种解决方案是通过 kwargs 传递它,并在表单初始化之前弹出它,但如果你不提供 forms.py 文件也很难推荐任何东西

    【讨论】:

      猜你喜欢
      • 2022-11-28
      • 2012-02-11
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多