On Oct 27, 4:27 am, Jorge <aldea.diagu...@gmail.com> wrote:
> I'm trying to poblate a database with a csv file using the modelform
> in Admin site. Here's the files:
>
> Models.py:
>
> class Data(models.Model):
>         place = models.ForeignKey(Places)
>         time = models.DateTimeField(blank=True)
>         data_1 = models.DecimalField(max_digits=3, decimal_places=1,
> blank=True)
>         data_2 = models.DecimalField(max_digits=3, decimal_places=1,
> blank=True)
>         data_3 = models.DecimalField(max_digits=4, decimal_places=1,
> blank=True)
>
> Forms.py:
>
> import csv
> from datetime import datetime
>
> class DataInput(ModelForm):
>     file = forms.FileField()
>
>     class Meta:
>         model = Data
>         fields = ("file", "place")
>
>     def save(self, commit=True, *args, **kwargs):
>         form_input = super(DataInput, self).save(commit=False, *args,
> **kwargs)
>         self.place = self.cleaned_data['place']
>         self.file = self.cleaned_data['file']
>         records = csv.reader(self.file)
>         for line in records:
>             self.time = datetime.strptime(line[1], "%m/%d/%y %H:%M:
> %S")
>             self.data_1 = float(line[2])
>             self.data_2 = float(line[3])
>             self.data_3 = float(line[4])
>             form_input.save()
>
> test.csv (it's only one line for test purposes, the real file has much
> more lines):
> 1,5/18/10 11:45:00,1.2,2.7,205.
>
> When i put the file got an IntegrityError: datas_data.time may not be
> NULL ; and the problem is in Forms.py line: form_input.save()
>
> What i'm missing?!

You're setting the values on `self` in the form's save method. In
other words, you're setting them on the *form*, not the instance. You
should be setting them on `form_instance`.

Also, don't convert the decimals to float. Decimal accepts a string
value, and converting to float will just introduce possible floating-
point precision errors.
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to