Opened 14 years ago
Closed 14 years ago
#13824 closed (duplicate)
ModelValidation ignores blank=True
Reported by: | anonymous | Owned by: | nobody |
---|---|---|---|
Component: | Documentation | Version: | 1.2 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | UI/UX: |
Description
Cheers,
I'm not quite sure if this is a feature or a bug, so sorry if i misunderstood this.
I am using a Model "Foo" that has a field like this:
[...] class Foo(models.Model): uid = models.ForeignKey(UserProfile, blank=True) [...]
Next, I'm using this Model in a Form (via ModelForm):
class FooForm(ModelForm): class Meta: model = Foo [...]
I expect Django to ignore the uid
when calling is_valid()
, as it's blank
attribute is set True
, but I get a ValueError:
ValueError at /foo/add/ Cannot assign None: "Foo.uid" does not allow null values. Request Method: POST Request URL: http://localhost:8000/de/foo/add/ Django Version: 1.2.1 Exception Type: ValueError Exception Value: Cannot assign None: "Foo.uid" does not allow null values. Exception Location: <cut>/lib/python2.6/site-packages/django/db/models/fields/related.py in __set__, line 314
This is since at the point where is_valid()
is valled, uid is set to None
, since it is not sent by the form but filled in my view (it's request.user.get_profile().user_id).
I looked for this in the Django docs, but didn't get a proper solution but using full_clean()
which would need me to adapt the code & use try/except .
Change History (4)
comment:1 by , 14 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:3 by , 14 years ago
Resolution: | invalid |
---|---|
Status: | closed → reopened |
Further, uid_id may never be NULL due to django policies.
comment:4 by , 14 years ago
Resolution: | → duplicate |
---|---|
Status: | reopened → closed |
OK, if you actually want to support no entry in the form but require some value in the DB (which implies your code is somehow going to set the value to something after calling is_valid()
) then this is a dupe of #13776.
You need both blank=True and null=True. The first allows blanks to be submitted as valid form values, the second allows nulls to be stored in the database field. See: http://docs.djangoproject.com/en/dev/ref/models/fields/#null