On Wed, Jan 11, 2012 at 3:29 PM, Daniel Sokolowski <daniel.sokolow...@klinsight.com> wrote: > +1 even though I agree with what Babatunde said I support this change as > anything that minimizes a 'gotchas' during development is very good. I > raether get an exception instead of spending half an hour debuging why my > data is not being saved. Sure once I figure it out I would learn to pay > attention in similar situations in the future but realistically I shouldn't > and nor should the next python/django programmer re-discovering this caveat. >
The consequence of this is not that data would not be saved, it would be that previously saved data is removed by django when updating other fields on the model. Eg, if you had a Profile object: class Profile(models.Model): logo = models.ImageField() salutation = models.CharField(max_length=64) and there is a model form for updating the logo: class UpdateProfileLogoForm(forms.ModelForm): class Meta: model = Profile exclude=('salutation',) and the view that presents this form renders it like so: <form method='post'> {{ form.logo }} <input type='submit' value='submit'/> </form> then this would work correctly. However, consider what happens when an additional field is added to Profile: class Profile(models.Model): logo = models.ImageField() salutation = models.CharField(max_length=64) pet_name = models.CharField(max_length=128, blank=True) Now, the model form instantly has an additional field 'pet_name', but if it is empty or not present, the form will still validate as blank=True on that field. If a user sets a pet_name, but then updates their logo using this model form, the pet_name will be assumed by django to have been removed, and the pet_name stored in the DB will be updated to the empty string. Are there any other situations where this can happen? The problem is in fact caused by using 'exclude' to choose the fields presented in a model form, using 'fields' and explicitly listing the fields seems much safer. Cheers Tom -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.