Обновить запись, используя форму модели в Django
HI Я обновляю существующую запись, но каждый раз, когда я делаю, она говорит 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
1 ответ
Ошибка, вероятно, связана с противоречивым поведением формы относительно модели. Поскольку база данных хранит OneToOneField как целое число и CharField как varchar.
Вам не нужно переопределять метод init формы. Вы можете сделать это напрямую с начальным аргументом.
form = EditBasicDetailsForm(initial = {'username' : request.user)
Обновить:
В вашем представлении кода я бы предложил вам правильно назначить вам оператор HttpResponseRedirect. В противном случае, если форма верна, она не будет отображаться снова.
if form.is_valid():
form.save()
return HttpResponseRedirect('/myprofile/')