I have a MySQL database, right now I'm generating all of the datetime fields as models.DateTimeField
. Is there a way to get a timestamp
instead? I want to be able to autoupdate on create and update etc.
The documentation on django doesn't have this?
TimeField is a time field which stores time, represented in Python by a datetime. time instance. As the name suggests, this field is used to store an object of datetime created in python.
Fields in Django are the data types to store a particular type of data. For example, to store an integer, IntegerField would be used. These fields have in-built validation for a particular data type, that is you can not store “abc” in an IntegerField.
What is SlugField in Django? It is a way of generating a valid URL, generally using data already obtained. For instance, using the title of an article to generate a URL. Let's assume our blog have a post with the title 'The Django book by Geeksforgeeks' with primary key id= 2.
There was actually a very good and informative article on this. Here: http://ianrolfe.livejournal.com/36017.html
The solution on the page is slightly deprecated, so I did the following:
from django.db import models from datetime import datetime from time import strftime class UnixTimestampField(models.DateTimeField): """UnixTimestampField: creates a DateTimeField that is represented on the database as a TIMESTAMP field rather than the usual DATETIME field. """ def __init__(self, null=False, blank=False, **kwargs): super(UnixTimestampField, self).__init__(**kwargs) # default for TIMESTAMP is NOT NULL unlike most fields, so we have to # cheat a little: self.blank, self.isnull = blank, null self.null = True # To prevent the framework from shoving in "not null". def db_type(self, connection): typ=['TIMESTAMP'] # See above! if self.isnull: typ += ['NULL'] if self.auto_created: typ += ['default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'] return ' '.join(typ) def to_python(self, value): if isinstance(value, int): return datetime.fromtimestamp(value) else: return models.DateTimeField.to_python(self, value) def get_db_prep_value(self, value, connection, prepared=False): if value==None: return None # Use '%Y%m%d%H%M%S' for MySQL < 4.1 return strftime('%Y-%m-%d %H:%M:%S',value.timetuple())
To use it, all you have to do is: timestamp = UnixTimestampField(auto_created=True)
In MySQL, the column should appear as: 'timestamp' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
Only drawback with this is that it only works on MySQL databases. But you can easily modify it for others.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With