Обновить запись, используя форму модели в django

Привет, я обновляю существующую запись, но каждый раз, когда я это делаю, она говорит: 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. Я не уверен, что я делаю неправильно в этой простой функции.

-Викрам


person vkrams    schedule 09.12.2012    source источник


Ответы (1)


Ошибка, вероятно, связана с непоследовательным поведением формы по отношению к модели. Так как база данных хранит OneToOneField как целое число, а CharField как varchar.

Вам не нужно переопределять метод формы init. Вы можете сделать это напрямую с начальным аргументом.

form = EditBasicDetailsForm(initial = {'username' : request.user)

Обновлять:

В вашем коде представления я бы посоветовал вам правильно указать оператор HttpResponseRedirect. В противном случае, если форма действительна, она не будет отображаться снова.

if form.is_valid():
          form.save()
          return HttpResponseRedirect('/myprofile/')
person Raunak Agarwal    schedule 09.12.2012
comment
Привет, Раунак. Хочешь, я поменяю форму? и я добавил указанную выше строку в условие if, но ошибка все еще сохраняется - person vkrams; 09.12.2012
comment
Да, вы можете удалить метод init, если нет, и попробовать еще раз! - person Raunak Agarwal; 09.12.2012
comment
Я использую метод init для извлечения существующих значений из базы данных. В приведенном выше вопросе я разместил только имя пользователя в форме, но у меня есть все поля self.fields['fieldname'] - person vkrams; 09.12.2012
comment
Но вам не нужно, если вы используете первоначальный аргумент, он позаботится об этом. Более того, объект, который вы пытаетесь получить из базы данных, будет таким же, как и запрос, так как в промежуточном программном обеспечении об этом позаботится. - person Raunak Agarwal; 09.12.2012
comment
Не могли бы вы показать нам полную ошибку вместе с местом ошибки? - person Raunak Agarwal; 09.12.2012
comment
давайте продолжим обсуждение в чате - person Raunak Agarwal; 09.12.2012
comment
После этого поста stackoverflow.com/questions/ 1202839/ Я нашел решение - person vkrams; 12.12.2012