Opened 12 years ago
Closed 12 years ago
#21637 closed Bug (invalid)
Defining objects of models having custom field without any parameter.
| Reported by: | ANUBHAV JOSHI | Owned by: | ANUBHAV JOSHI |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.6 |
| 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 (last modified by )
When we define any model, then we can create its object as obj=ModelClassName(). But when we define custom fields we just cannot do the same always. If we are using to_python() method, then it shows up error.
If a define my model as:
from django.db import models
class LField(models.Field):
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
return 'longtext'
def to_python(self, value):
return long(value)
class Person(models.Model):
name = models.CharField(max_length=80, blank=True, null=True)
something_else = LField()
class Person2(models.Model):
name = models.CharField(max_length=80, blank=True, null=True)
ph = models.CharField(max_length=80, blank=True, null=True)
Then it is not possible to define an object of Person type without giving parameters.
i.e.
p=Person() raises ValueError
p=Person2() works fine as it should like in case of any other class.
Change History (4)
comment:1 by , 12 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:2 by , 12 years ago
| Description: | modified (diff) |
|---|
comment:3 by , 12 years ago
comment:4 by , 12 years ago
| Resolution: | → invalid |
|---|---|
| Status: | assigned → closed |
The to_python method must handle empty values (string/None) as documented here:
https://docs.djangoproject.com/en/1.6/howto/custom-model-fields/#django.db.models.Field.to_python
C:\Python27\lib\site-packages\django\db\models\base.pyc in init(self, *args, kwargs)
--> 405 setattr(self, field.attname, val)
C:\Python27\lib\site-packages\django\db\models\fields\subclassing.py in set
self, obj, value)
---> 35 obj.dict[self.field.name] = self.field.to_python(value)
C:\anubhav_imp\django_projects\dev\test1\models.pyc in to_python(self, value)
ValueError: invalid literal for long() with base 10: