Here is DateField class
I think You will find all You need here

class DateField(Field):
    description = _("Date (without time)")

    empty_strings_allowed = False
    default_error_messages = {
        'invalid': _('Enter a valid date in YYYY-MM-DD format.'),
        'invalid_date': _('Invalid date: %s'),
    }
    def __init__(self, verbose_name=None, name=None, auto_now=False,
auto_now_add=False, **kwargs):
        self.auto_now, self.auto_now_add = auto_now, auto_now_add
        #HACKs : auto_now_add/auto_now should be done as a default or a
pre_save.
        if auto_now or auto_now_add:
            kwargs['editable'] = False
            kwargs['blank'] = True
        Field.__init__(self, verbose_name, name, **kwargs)

    def get_internal_type(self):
        return "DateField"

    def to_python(self, value):
        if value is None:
            return value
        if isinstance(value, datetime.datetime):
            return value.date()
        if isinstance(value, datetime.date):
            return value

        if not ansi_date_re.search(value):
            raise exceptions.ValidationError(self.error_messages['invalid'])
        # Now that we have the date string in YYYY-MM-DD format, check to
make
        # sure it's a valid date.
        # We could use time.strptime here and catch errors, but
datetime.date
        # produces much friendlier error messages.
        year, month, day = map(int, value.split('-'))
        try:
            return datetime.date(year, month, day)
        except ValueError, e:
            msg = self.error_messages['invalid_date'] % _(str(e))
            raise exceptions.ValidationError(msg)

    def pre_save(self, model_instance, add):
        if self.auto_now or (self.auto_now_add and add):
            value = datetime.datetime.now()
            setattr(model_instance, self.attname, value)
            return value
        else:
            return super(DateField, self).pre_save(model_instance, add)

    def contribute_to_class(self, cls, name):
        super(DateField,self).contribute_to_class(cls, name)
        if not self.null:
            setattr(cls, 'get_next_by_%s' % self.name,
                curry(cls._get_next_or_previous_by_FIELD, field=self,
is_next=True))
            setattr(cls, 'get_previous_by_%s' % self.name,
                curry(cls._get_next_or_previous_by_FIELD, field=self,
is_next=False))

    def get_prep_lookup(self, lookup_type, value):
        # For "__month", "__day", and "__week_day" lookups, convert the
value
        # to an int so the database backend always sees a consistent type.
        if lookup_type in ('month', 'day', 'week_day'):
            return int(value)
        return super(DateField, self).get_prep_lookup(lookup_type, value)

    def get_prep_value(self, value):
        return self.to_python(value)

    def get_db_prep_value(self, value, connection, prepared=False):
        # Casts dates into the format expected by the backend
        if not prepared:
            value = self.get_prep_value(value)
        return connection.ops.value_to_db_date(value)

    def value_to_string(self, obj):
        val = self._get_val_from_obj(obj)
        if val is None:
            data = ''
        else:
            data = datetime_safe.new_date(val).strftime("%Y-%m-%d")
        return data

    def formfield(self, **kwargs):
        defaults = {'form_class': forms.DateField}
        defaults.update(kwargs)
        return super(DateField, self).formfield(**defaults)

On Thu, Jun 17, 2010 at 8:47 AM, Alexander Jeliuc
<jeliucalexa...@gmail.com>wrote:

> Your error is this...
> def save(self,*args,**kwargs):
>        if not self.start_date:
>            self.start_date=models.DateField(datetime.date.today())
>            year=timedelta(days=365)
>            self.expire_date=models.DateField(datetime.date.today()
> +year)
>
>
>
> On Thu, Jun 17, 2010 at 8:40 AM, Sheena <sheena.oconn...@gmail.com> wrote:
>
>> Thanks
>>
>> The question is how do I populate a field with some other date, for
>> example, there's a date of birth field that the auto stuff wont be
>> ideal for...
>> In the populate method i mentioned before, i passed the dob(date of
>> birth) field a Date object initialized to something arbitrary. Does
>> the DateField not get along with standard date objects? What format
>> should stuff be in for populating DateFields?
>>
>> On Jun 17, 7:24 am, Alexander Jeliuc <jeliucalexa...@gmail.com> wrote:
>> > read about autofill_now=True and autofill=True
>> >
>> > On Thu, Jun 17, 2010 at 8:14 AM, Sheena <sheena.oconn...@gmail.com>
>> wrote:
>> > > I've defined a number of models, one of which I've called
>> > > MemberProfile that looks like this
>> >
>> > > class MemberProfile(models.Model):
>> > >    postal_addr1=models.CharField(max_length=50, verbose_name="postal
>> > > address line 1")
>> > >    postal_addr2=models.CharField(max_length=50, verbose_name="postal
>> > > address line 2")
>> > >    postal_addr3=models.CharField(max_length=50, verbose_name="postal
>> > > address line 3")
>> > >    postalcode=models.CharField(max_length=4, verbose_name="postal
>> > > code")
>> > >    res_addr1=models.CharField(max_length=50,
>> > > verbose_name="residential address line 1")
>> > >    res_addr2=models.CharField(max_length=50,
>> > > verbose_name="residential address line 2")
>> > >    res_addr3=models.CharField(max_length=50,
>> > > verbose_name="residential address line 3")
>> > >    rescode=models.CharField(max_length=4, verbose_name="residential
>> > > postal code")
>> > >    homeno=models.CharField(max_length=12, verbose_name="home number")
>> > >    workno=models.CharField(max_length=12, verbose_name="work number")
>> > >    cellno=models.CharField(max_length=12, unique=True,
>> > > verbose_name="cellphone number")
>> > >    idno=models.CharField(max_length=13, unique=True, verbose_name="id
>> > > or passport number")
>> > >    occu=models.CharField(max_length=15, verbose_name="occupation")
>> > >    employer=models.CharField(max_length=30)
>> > >    amount_paid=models.IntegerField(blank=True, null=True,
>> > > help_text="total fees paid to date", verbose_name="total reciepts")
>> > >    reciept_no=models.IntegerField(blank=True, null=True,
>> > > help_text="latest reciept number", verbose_name="reciept number")
>> > >    dob=models.DateField(verbose_name="date of birth")
>> > >    start_date=models.DateField()
>> > >    expire_date=models.DateField()
>> > >    captured_by=models.CharField(max_length=50, help_text="name of
>> > > data capturer")
>> > >    photo=models.ImageField(upload_to="memberphotos", null=True,
>> > > blank=True)
>> > >    permission=models.CharField(max_length=1,
>> > > choices=PERMISSION_CHOICES, help_text="Administration level, if the
>> > > user is a superuser this field has no effect")
>> > >    user=models.ForeignKey(User,unique=True,related_name="member",
>> > > editable=False)
>> > >    branch=models.ForeignKey(Branch,related_name="member", null=True)
>> >
>> > >    def create_member(self,username,email,password):
>> > >        m=MemberProfile()
>> >
>> > >
>> m.user=User.objects.create_user(username=username,email=email,password=password)
>> > >        return m
>> >
>> > >    def __unicode__(self):
>> > >        return self.user.username
>> >
>> > >    def save(self,*args,**kwargs):
>> > >        if not self.start_date:
>> > >            self.start_date=models.DateField(datetime.date.today())
>> > >            year=timedelta(days=365)
>> > >            self.expire_date=models.DateField(datetime.date.today()
>> > > +year)
>> > >        super(MemberProfile, self).save(self,*args,**kwargs)
>> >
>> > > I then wrote a method called populate just to test the database out
>> > > and it is pretty friendly until I get this:
>> >
>> > > Traceback (most recent call last):
>> > >  File "<console>", line 1, in <module>
>> > >  File "/host/Shared info/MyDBA/MyMembers/populate.py", line 114, in
>> > > populate
>> > >    m1.save()
>> > >  File "/host/Shared info/MyDBA/MyMembers/../MyMembers/chiefs/
>> > > models.py", line 115, in save
>> > >    super(MemberProfile, self).save(self,*args,**kwargs)
>> > >  File "/usr/lib/pymodules/python2.6/django/db/models/base.py", line
>> > > 410, in save
>> > >    self.save_base(force_insert=force_insert,
>> > > force_update=force_update)
>> > >  File "/usr/lib/pymodules/python2.6/django/db/models/base.py", line
>> > > 483, in save_base
>> > >    values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname)
>> > > or f.pre_save(self, True))) for f in meta.local_fields if not
>> > > isinstance(f, AutoField)]
>> > >  File "/usr/lib/pymodules/python2.6/django/db/models/fields/
>> > > __init__.py", line 192, in get_db_prep_save
>> > >    return self.get_db_prep_value(value)
>> > >  File "/usr/lib/pymodules/python2.6/django/db/models/fields/
>> > > __init__.py", line 511, in get_db_prep_value
>> > >    return connection.ops.value_to_db_date(self.to_python(value))
>> > >  File "/usr/lib/pymodules/python2.6/django/db/models/fields/
>> > > __init__.py", line 472, in to_python
>> > >    if not ansi_date_re.search(value):
>> > > TypeError: expected string or buffer
>> >
>> > > m1 is an instance of MemberProfile...
>> >
>> > > The error goes away if I comment out everything to do with
>> > > DateField...
>> > > Am I doing something retarded? As far as I can see I'm populating the
>> > > fields the right way...
>> >
>> > > Any help would be greatly appreciated
>> >
>> > > --
>> > > You received this message because you are subscribed to the Google
>> Groups
>> > > "Django users" group.
>> > > To post to this group, send email to django-us...@googlegroups.com.
>> > > To unsubscribe from this group, send email to
>> > > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
>> <django-users%2bunsubscr...@googlegroups.com<django-users%252bunsubscr...@googlegroups.com>
>> >
>> > > .
>> > > For more options, visit this group at
>> > >http://groups.google.com/group/django-users?hl=en.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To post to this group, send email to django-us...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/django-users?hl=en.
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to