[英]UpdateView not populating form with existing data
因此,我將 UpdateView 設置為向表單發送request
對象,以便我可以修改表單中的查詢集(基於request.user
)
我的意見.py:
class DataSourceUpdateView(UpdateView):
model = DataSource
form_class = DataSourceForm
template_name = 'engine/datasource_update.html'
def get(self, request, *args, **kwargs):
obj = DataSource.objects.get(pk=kwargs['pk'])
self.object = None
form = DataSourceForm(request)
return self.render_to_response(
self.get_context_data(form=form,
object=obj))
def post(self, request, *args, **kwargs):
form = DataSourceForm(request, request.POST, request.FILES)
if form.is_valid:
return self.form_valid(form)
else:
return self.form_invalid(form)
我的forms.py:
class DataSourceForm(forms.ModelForm):
def __init__(self, request, *args, **kwargs):
self.request = request
super(DataSourceForm, self).__init__(*args, **kwargs)
self.fields['dataset_request'].queryset = DatasetRequest.objects.filter(
creator=self.request.user)
class Meta:
model = DataSource
exclude = ('creator', 'vote_score', 'num_vote_up',
'num_vote_down', 'file_size', 'slug')
我的問題是,在模板中,表單未填充現有值。 我怎樣才能解決這個問題?
使用UpdateView
有點棘手。 因此,為了初始化表單的數據,您需要在視圖本身而不是在表單中進行初始化。
因此,以下是您在使用UpdateView
時如何執行已完成的UpdateView
:
class DataSourceUpdateView(UpdateView):
model = DataSource
form_class = DataSourceForm
template_name = 'engine/datasource_update.html'
# An empty dict or add an initial data to your form
initial = {}
# And don't forget your success URL
# or use reverse_lazy by URL's name
# Or better, override get_success_url() method
# And return your success URL using reverse_lazy
sucess_url = '/'
def get_initial(self):
"""initialize your's form values here"""
base_initial = super().get_initial()
# So here you're initiazing you're form's data
base_initial['dataset_request'] = DatasetRequest.objects.filter(
creator=self.request.user
)
return base_initial
#... The rest of your view logic
你的形式將是:
class DataSourceForm(forms.ModelForm):
class Meta:
model = DataSource
exclude = (
'creator',
'vote_score',
'num_vote_up',
'num_vote_down',
'file_size',
'slug'
)
獎金:
為了理解為什么需要初始化表單的數據,您需要查看`UpdateView's MRO,請訪問此文檔鏈接:
FormMixin
具有這些屬性和方法, 請訪問文檔鏈接,它們是:
此外,我建議您查看FormMixin
具有的屬性和方法,以便了解如何覆蓋它們或讓 Django 為您FormMixin
魔法:D。 請參閱此文檔鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.