我的forms.py中有两个CharField,我的models.py文件中有FirstName和LastName以及CharField FullName。
如何添加两个(FirstName和LastName)并将它们存储为FullName?
我尝试在forms.py(不工作)中执行此操作,因此唯一的另一个选择是在views.py中的POST请求之后更改它但不确定如何更改其内容。
models.py
class UserProfile(models.Model):
FullName = models.CharField(max_length=10)
balance = models.IntegerField(default=2000)
def __unicode__(self):
return self.user.FullName
forms.py
class UserProfileForm(forms.ModelForm):
FirstName = forms.CharField()
LastName = forms.CharField()
balance = forms.IntegerField(initial=2000,help_text="")
def clean(self):
cleaned_data = self.cleaned_data
url = cleaned_data.get('url')
if url and not url.startswith('http://'):
url = 'http://' + url
cleaned_data['url'] = url
return cleaned_data
class Meta:
model = UserProfile
fields = ('FullName', 'balance')
views.py
def index(request):
context = RequestContext(request)
game_list = Game.objects.all()
context_dict = {'games': game_list}
profile_form = UserProfileForm()
if request.method == 'POST':
profile_form = UserProfileForm(data=request.POST)
context_dict = {'games': game_list, 'profile_form':profile_form}
print profile_form
if profile_form.is_valid():
profile = profile_form.save(commit=False)
profile.save()
registered = True
else:
print profile_form.errors
return render_to_response('/', context_dict, context)
答案 0 :(得分:0)
可能最简单的方法是覆盖表单的save方法,填充实例fullname字段
class UserProfileForm(forms.ModelForm):
FirstName = forms.CharField()
LastName = forms.CharField()
balance = forms.IntegerField(initial=2000,help_text="")
def clean(self):
cleaned_data = self.cleaned_data
url = cleaned_data.get('url')
if url and not url.startswith('http://'):
url = 'http://' + url
cleaned_data['url'] = url
return cleaned_data
def save(self, commit=True):
profile = super(UserProfileForm, self).save(commit=False)
profile.set_fullname(self.cleaned_data["FirstName"], self.cleaned_data["LastName"])
if commit:
profile.save()
return profile
class Meta:
model = UserProfile
fields = ('balance')
然后在UserProfile
模型中,您将有一个set_fullname
方法来实现所需的逻辑,例如:
class UserProfile(models.Model):
# various things ...
def set_fullname(self, f_name, l_name):
self.FullName = f_name + ' ' + l_name
此外,我忽略了视图部分,因为我认为它只是一个存根,需要大的改进。