Question

HI I am updating an existing record, but everytime I do, its is saying Truncated incorrect DOUBLE value: 'user1' I am pasting my view and models here. Please help me

Model

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)

View

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))

Model Form

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

In the above view, I am not passing the username I am just getting the username value from request.user I am not sure what I am making wrong on this simple functionality.

-Vikram

Was it helpful?

Solution

The error is probably related to the inconsistent behavior of the form wrt model. Since, the database stores the OneToOneField as integer and CharField as varchar.

You don't have to override the form init method. You could do it directly with the initial argument.

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

Update:

In your view code I would suggest you to properly intend you HttpResponseRedirect statement. Otherwise, if the form is in valid it won't display it again.

if form.is_valid():
          form.save()
          return HttpResponseRedirect('/myprofile/')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top