使用通过 POST 方法发送到的另一个表单的数据预填充 FormView 中的 ModelForm -Django

问题描述 投票:0回答:1

我正在尝试使用另一种表单的数据预填充 django FormView 字段(为会议纪要创建者做准备)。 我做了一个项目来简化和重现错误,以便更好地理解和更容易解决...... 您会看到 body 字段存在于 ModelForm 中,但不存在于 preparoty 表单中。正是如此,我可以使用用户在准备表单中输入的数据来动态创建分钟。 因此,基本上,我必须用初始数据填充“正文”字段,这些数据将在使用用户刚刚发布的信息后动态创建。 我可以做动态的事情,但我找不到填补这个领域的方法。 主席和秘书字段由 django FormView (基于类的视图)自动填充,但主体我不能,甚至覆盖上面的初始方法。 顺便说一句,如果我在 get_initial 方法中打印“initial”,它是空的,尽管字段已填满...... 有人知道如何解决吗?

我尝试重写 get_initial() 方法,但没有成功。

初始表格(预备):

from django import forms
from core.models import MinuteModel


class MyForm(forms.Form):
    president = forms.CharField(widget=forms.TextInput())
    secretary = forms.CharField(widget=forms.TextInput())

型号:

class MinuteModel(models.Model):
    president = models.CharField(max_length=120)
    secretary = models.CharField(max_length=120)
    body = models.CharField(max_length=1000)

创建会议纪要的表格:

class MyMinuteModelForm(forms.ModelForm):
    class Meta:
        model = MinuteModel
        fields = "__all__"

表单视图:

class MyFormView(FormView):
    form_class = MyMinuteModelForm
    template_name = "core/creation.html"
    def get_initial(self):
        initial = super(MyFormView, self).get_initial()
        initial['body'] = "asdasd"
        return initial
python django django-class-based-views formview
1个回答
0
投票

我经过几天的尝试才问,现在,在我回答之后,我“解决”了它。虽然不是我想要的方式。 现在,我必须初始化所有字段,因此 FormView 变得毫无用处(就我需要的而言)。这很好,因为它预先填充了所有数据(除了不在准备表单中的字段,显然,我想用视图初始化这些字段)。 但如果我想初始化一个字段,至少按照我的方式,它会将所有值替换为空。 有代码:

class MyModelFormView(FormView):
template_name = 'core\\blog.html'
form_class = BlogModelForm

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)

    # Define initial values for your fields
    initial = {
        'title': self.request.POST.get('title'),
        'meep': 'sadfsdfsd',
    }

    context['form'] = self.form_class(initial=initial)
    return context

所以..如果您知道有什么方法可以仅覆盖一个字段,那就太好了。

如果没有,也许在这种情况下最好使用更简单的基于函数的视图。

© www.soinside.com 2019 - 2024. All rights reserved.