#239 closed defect (fixed)
Initializing a model instance should not require fields with blank
| Reported by: | maurycy | Owned by: | Adrian Holovaty |
|---|---|---|---|
| Component: | Metasystem | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
1.
[maurycy@localhost ~]$ export DJANGO_SETTINGS_MODULE='model_test.settings.main'
2.
[maurycy@localhost ~]$ cat model_test/apps/test/models/test.py
3.
from django.core import meta
4.
5.
class Test(meta.Model):
6.
fields = (
7.
meta.IntegerField('number', 'number', blank=True, default=666),
8.
)
9.
admin = meta.Admin()
10.
[maurycy@localhost ~]$ django-admin.py sqlall test
11.
BEGIN;
12.
CREATE TABLE test_tests (
13.
id integer NOT NULL PRIMARY KEY,
14.
number integer NOT NULL
15.
);
16.
INSERT INTO packages (label, name) VALUES ('test', 'test');
17.
INSERT INTO content_types (name, package, python_module_name) VALUES ('test', 'test', 'tests');
18.
INSERT INTO auth_permissions (name, package, codename) VALUES ('Can add test', 'test', 'add_test');
19.
INSERT INTO auth_permissions (name, package, codename) VALUES ('Can change test', 'test', 'change_test');
20.
INSERT INTO auth_permissions (name, package, codename) VALUES ('Can delete test', 'test', 'delete_test');
21.
COMMIT;
22.
[maurycy@localhost ~]$ django-admin.py install test
23.
[maurycy@localhost ~]$ python
24.
Python 2.4.1 (#1, May 16 2005, 15:19:29)
25.
[GCC 4.0.0 20050512 (Red Hat 4.0.0-5)] on linux2
26.
Type "help", "copyright", "credits" or "license" for more information.
27.
>>> from django.models.test import tests
28.
>>> test = tests.Test(id=None)
29.
>>> test.save()
30.
Traceback (most recent call last):
31.
File "<stdin>", line 1, in ?
32.
File "/usr/lib/python2.4/site-packages/django/core/meta.py", line 87, in _curried
33.
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
34.
File "/usr/lib/python2.4/site-packages/django/core/meta.py", line 737, in method_save
35.
f.pre_save(self, getattr(self, f.name), add)
36.
AttributeError: 'Test' object has no attribute 'number'
Change History (10)
comment:1 by , 20 years ago
comment:2 by , 20 years ago
Hmm. You have named your app "test". That's not a good idea with Python - test is a module in the standard library and depending on how imports are done you might stumble over this builtin "test" module. It's a quite usual people run into with python.
comment:3 by , 20 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
This is a user error; you've got to fill in all the fields of the object if you're creating it by hand (note that manipulators handle this for you).
comment:4 by , 20 years ago
| Resolution: | invalid |
|---|---|
| Status: | closed → reopened |
I think that it should be done better.
I'm working on sessions subsystem and I have the following model:
fields = (
meta.CharField('name', 'name', maxlength=100, db_index=True, unique=True),
meta.CharField('path', 'path', maxlength=60, default='/', blank=True, null=True),
meta.CharField('domain', 'domain', maxlength=200, default=REGISTRATION_COOKIE_DOMAIN, blank=True),
meta.IntegerField('max_age', 'max age in seconds', default=7200, blank=True),
meta.BooleanField('is_secure', 'is secure', blank=True),
)
Now, in the most cases no one will have to fill path, domain or max_age, because defaults are pretty good. Forcing users to fill them once more time, especially if default and blank are set, is unnecessary.
comment:5 by , 20 years ago
| priority: | high → normal |
|---|
comment:6 by , 20 years ago
| Status: | reopened → new |
|---|---|
| Summary: | AttributeError on fields with blank and default → Initializing a model instance should not require fields with blank=True or "default" |
Ah, now I understand the issue. I agree that initializing a model instance shouldn't require fields with blank=True or "default" set. I'll work on the change.
comment:7 by , 20 years ago
| Status: | new → assigned |
|---|
comment:8 by , 20 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
comment:10 by , 19 years ago
| Summary: | Initializing a model instance should not require fields with blank=True or "default" → Initializing a model instance should not require fields with blank |
|---|
If it's not the bug, creating uninitialized blank fields with default should be better documented.