在 Django ModelForm 中保存自定义字段
Save custom field in Django ModelForm
我无法在 ModelForm 中保存自定义字段。有问题的字段是 ModelChoiceField。
我添加了 save()
方法,如 this 问题所示。但是,当我使用它时出现错误:
ImproperlyConfigured
No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.
当我删除我的自定义 save()
方法时,它工作正常但不保存自定义字段。我错过了什么?
class NewStoryForm(forms.ModelForm):
class Meta:
model = Story
fields = ['title', 'story_text']
#custom field
about = forms.ModelChoiceField(queryset=None)
#initialise custom field
def __init__(self, user, *args, **kwargs):
super(NewStoryForm, self).__init__(*args, **kwargs)
self.fields['about'] = forms.ModelChoiceField(queryset=Experience.objects.filter(user=user))
#save custom field
def save(self, commit=True):
self.instance.about = self.cleaned_data['about']
super(NewStoryForm, self).save(commit=commit)
class NewStoryView(CreateView):
form_class = NewStoryForm
template_name = 'story/story_form.html'
#Send user to NewStoryForm to initialise custom field
def get_form_kwargs(self):
kwargs = super(NewStoryView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
#save author as current user
def form_valid(self, form):
form.instance.author = self.request.user
return super(NewStoryView, self).form_valid(form)
您应该 return 从 save()
方法保存的对象:
return super(NewStoryForm, self).save(commit=commit)
我无法在 ModelForm 中保存自定义字段。有问题的字段是 ModelChoiceField。
我添加了 save()
方法,如 this 问题所示。但是,当我使用它时出现错误:
ImproperlyConfigured
No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.
当我删除我的自定义 save()
方法时,它工作正常但不保存自定义字段。我错过了什么?
class NewStoryForm(forms.ModelForm):
class Meta:
model = Story
fields = ['title', 'story_text']
#custom field
about = forms.ModelChoiceField(queryset=None)
#initialise custom field
def __init__(self, user, *args, **kwargs):
super(NewStoryForm, self).__init__(*args, **kwargs)
self.fields['about'] = forms.ModelChoiceField(queryset=Experience.objects.filter(user=user))
#save custom field
def save(self, commit=True):
self.instance.about = self.cleaned_data['about']
super(NewStoryForm, self).save(commit=commit)
class NewStoryView(CreateView):
form_class = NewStoryForm
template_name = 'story/story_form.html'
#Send user to NewStoryForm to initialise custom field
def get_form_kwargs(self):
kwargs = super(NewStoryView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
#save author as current user
def form_valid(self, form):
form.instance.author = self.request.user
return super(NewStoryView, self).form_valid(form)
您应该 return 从 save()
方法保存的对象:
return super(NewStoryForm, self).save(commit=commit)