我正在更新现有记录,但每次我都这样做,它就是说
Truncated incorrect DOUBLE value: 'user1'
我在这里粘贴我的观点和模型。请帮帮我
模型
class BasicDetails(models.Model):
username = models.OneToOneField(User)
name = models.CharField(max_length = 100, verbose_name = "Name")
sex = models.CharField(max_length = 10, verbose_name = "Sex", choices = GENDER_CHOICES)
dob = models.DateField(verbose_name = "Date of Birth")
class Meta:
db_table = u'wed_basicdetails'
def __unicode__(self):
return u'%s' % (self.username)
查看
def editbasicdetails(request):
if request.method == 'POST':
username = User.objects.filter(username = request.user)
instance = get_object_or_404(User, username = username)
form = EditBasicDetailsForm(request.POST,instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect('/myprofile/')
else:
form = EditBasicDetailsForm(request.user)
return shortcuts.render_to_response('editbasicdetails.html',locals(),
context_instance = context.RequestContext(request))
模型表格
class EditBasicDetailsForm(forms.ModelForm):
def __init__(self,user, *args, **kwargs):
super(EditBasicDetailsForm, self).__init__(*args, **kwargs)
userid = User.objects.filter(username = user).values('id')[0].get('id')
self.fields['username'] = forms.CharField(initial = user,
widget = forms.TextInput(attrs = {'readonly':'readonly'}))
class Meta:
model = BasicDetails
在上面的视图中,我没有传递用户名我只是从request.user
获取用户名值我不知道我在这个简单的功能上做错了什么。
-Vikram
答案 0 :(得分:1)
错误可能与表单wrt模型的不一致行为有关。因为,数据库将OneToOneField存储为整数,将CharField存储为varchar。
您不必覆盖表单 init 方法。你可以直接用初始参数来做。
form = EditBasicDetailsForm(initial = {'username' : request.user)
更新
在您的视图代码中,我建议您正确地打算使用HttpResponseRedirect语句。否则,如果表单有效,则不会再次显示。
if form.is_valid():
form.save()
return HttpResponseRedirect('/myprofile/')