Обновить запись, используя форму модели в 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/')
Другие вопросы по тегам