django - 如何用模型值填充表单字段
问题描述
我正在尝试用来自模型 Good 的数据填写我的表格。我使用按 id 过滤来获取某些对象。我需要重写 init 函数来设置一个有效的查询集,并且它可以工作。现在我需要为其他字段填充值。
这是我的forms.py:
class GoodGet(forms.ModelForm):
class Meta:
model = Good_Get
Size = forms.ModelChoiceField(queryset = Good.objects.all())
Name = forms.CharField(widget = forms.TextInput(attrs = {'value': Good.objects.all()}))
fields = '__all__'
def __init__(self, *args, good_id1=None, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
if good_id1 is not None:
obj = Good.objects.filter(id = good_id1)
for good in obj:
good_sizes = good.Size.all()
self.fields['Size'].queryset = good_sizes
我需要做这样的事情:
def __init__(self, *args, good_id1=None, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
if good_id1 is not None:
obj = Good.objects.filter(id = good_id1)
---> self.Name = obj.Name <---
for good in obj:
good_sizes = good.Size.all()
self.fields['Size'].queryset = good_sizes
那么,如何使用模型 Good 的数据填充其他字段的值?
解决方案
您可以将初始值设置为:
def __init__(self, *args, good_id1=None, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
if good_id1 is not None:
obj = Good.objects.get(id=good_id1)
self.fields['Name'].initial = obj.Name
self.fields['Size'].queryset = obj.Size.all()
因此,我们使用Good.objects.get(..)
来检索Good
与给定 id 匹配的对象,并将Name
该对象的属性作为.initial
该字段的值传递。
但是,如果只是ModelForm
用对象的值初始化 a ,则可以使用instance=
参数 [Django-doc],例如:
# construct a form with data from an instance
GoodGet(instance=Good.objects.get(id=some_id))
GoodGet
话虽如此,你的表格中有一些奇怪的部分。添加Form
后缀可能更好,您在类中指定字段,而不是在Meta
类中,并且使用{ 'value': Good.object.all() }
没有意义,因为值不能是一组Good
对象。
class GoodGetForm(forms.ModelForm):
Size = forms.ModelChoiceField(queryset=Good.objects.all())
Name = forms.CharField(widget=forms.TextInput()}))
class Meta:
model = Good_Get
fields = '__all__'
# ...
推荐阅读
- git - 尝试克隆存储库但行尾错误
- r - 在 R 中读取电子邮件附件 .xls
- wireshark - 未针对重传数据包解析有效负载文本(数据字段)?
- docker - ElasticSearch 容器不会在 Docker 中启动
- angular - Angular 6:HttpClient 获取 JSON 文件 404 错误
- r - 如何使用正则表达式从 R 中的字符串中删除 ன 等特殊字符
- ios - 快速引用数组的通用变量
- powershell - Solr 7.3.1 不会启动“SSL_PORT_PROP”此时出乎意料
- python - 解析电子邮件正文
- php - 通过 PHP 从 URL 读取我是否被 PWNED JSON 值