【问题标题】:update a QuerySet with a Form or ModelForm使用 Form 或 ModelForm 更新 QuerySet
【发布时间】:2019-03-23 05:46:53
【问题描述】:
我正在尝试使用 for 更新查询集的所有值,我找到了这个方法:
queryset = Query.objects.filter(version=XXX)
field1 = ModelForm.cleaned['field1']
...
fieldN = ModelForm.cleaned['fieldN']
queryset.update(['field1'=field1, ... , 'fieldN'=fieldN])
但我觉得这不是一个非常干净的方法,有没有更有效的方法?
【问题讨论】:
标签:
django
django-models
django-forms
django-queryset
modelform
【解决方案1】:
模型对象没有update() 方法。您需要手动将表单数据添加到模型中。
def update_all(request):
queryset = Model.objects.filter(filter=filter)
if request.method == 'POST':
form = UpdateAll(request.POST)
if form.is_valid():
data = form.cleaned_data
queryset.field_1 = data['field1']
queryset.field_2 = data['field2']
queryset.field_3 = data['field3']
【解决方案2】:
我终于用这个方法做到了:
在forms.py中:
class UpdateAll(forms.Form):
field_1 = forms.FloatField()
field_2 = forms.FloatField()
field_3 = forms.FloatField()
在views.py中:
def update_all(request):
queryset = Model.objects.filter(filter=filter)
if request.method == 'POST':
form = UpdateAll(request.POST)
if form.is_valid():
data = form.cleaned_data
queryset.update(**data)