Opened 6 years ago

Closed 6 years ago

#21637 closed Bug (invalid)

Defining objects of models having custom field without any parameter.

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 Tim Graham)

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.
p=Person() raises ValueError
p=Person2() works fine as it should like in case of any other class.

Change History (4)

comment:1 Changed 6 years ago by ANUBHAV JOSHI

Owner: changed from nobody to ANUBHAV JOSHI
Status: newassigned

comment:2 Changed 6 years ago by Tim Graham

Description: modified (diff)

comment:3 Changed 6 years ago by ANUBHAV JOSHI

C:\Python27\lib\site-packages\django\db\models\base.pyc in init(self, *args, kwargs)

403 setattr(self,, rel_obj)
404 else:

--> 405 setattr(self, field.attname, val)

407 if kwargs:

C:\Python27\lib\site-packages\django\db\models\fields\ in set
self, obj, value)

34 def set(self, obj, value):

---> 35 obj.dict[] = self.field.to_python(value)

37 def make_contrib(superclass, func=None):

C:\anubhav_imp\django_projects\dev\test1\models.pyc in to_python(self, value)

6 return 'longtext'
7 def to_python(self, value):


10 class Person(models.Model):

ValueError: invalid literal for long() with base 10:

comment:4 Changed 6 years ago by Tim Graham

Resolution: invalid
Status: assignedclosed

The to_python method must handle empty values (string/None) as documented here:

Note: See TracTickets for help on using tickets.
Back to Top