Each Answer to this Q is separated by one/two green lines.
What’s the best way to set a creation date for an object automatically, and also a field that will record when the object was last updated?
created_at = models.DateTimeField(False, True, editable=False) updated_at = models.DateTimeField(True, True, editable=False)
if request.method == 'POST': form = MyForm(request.POST) if form.is_valid(): obj = form.save(commit=False) obj.user = request.user obj.save() return HttpResponseRedirect('obj_list')
I get the error:
objects_object.created_at may not be NULL
Do I have to manually set this value myself? I thought that was the point of the parameters passed to
DateTimeField (or are they just defaults, and since I’ve set
editable=False they don’t get displayed on the form, hence don’t get submitted in the request, and therefore don’t get put into the form?).
What’s the best way of doing this? An
class TimeStampMixin(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True
Now anywhere you want to use it you can do a simple inherit and you can use timestamp in any model you make like.
class Posts(TimeStampMixin): name = models.CharField(max_length=50) ... ...
In this way, you can leverage object-oriented reusability, in Django DRY(don’t repeat yourself)
It is impossible to add the field ‘create_at’ with ‘auto_now_add=True’ to local without providing a default. This is because the database needs something to popula
te existing rows