我正在尝试使用另一种表单的数据预填充 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
我经过几天的尝试才问,现在,在我回答之后,我“解决”了它。虽然不是我想要的方式。 现在,我必须初始化所有字段,因此 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
所以..如果您知道有什么方法可以仅覆盖一个字段,那就太好了。
如果没有,也许在这种情况下最好使用更简单的基于函数的视图。