Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django在一个字段中有多个更新日期_Python_Django_Datetime - Fatal编程技术网

Python django在一个字段中有多个更新日期

Python django在一个字段中有多个更新日期,python,django,datetime,Python,Django,Datetime,在Django模型中创建“更新历史记录”字段以便跟踪多个更新日期的最佳方法是什么 我可以用last_updated=models.DateTimeField()创建一个模型,然后让我的视图将日期时间保存到模型中,但是如果我想记录用户更新帖子的时间,而不仅仅是最近的保存时间,该怎么办 它应该是一个ManyToManyField还是一个CharField?它不应该是一个字段。而是创建一个模型,该模型将使用ForeignKey引用主模型: class YourModel(models.Model):

在Django模型中创建“更新历史记录”字段以便跟踪多个更新日期的最佳方法是什么

我可以用last_updated=models.DateTimeField()创建一个模型,然后让我的视图将日期时间保存到模型中,但是如果我想记录用户更新帖子的时间,而不仅仅是最近的保存时间,该怎么办


它应该是一个ManyToManyField还是一个CharField?

它不应该是一个字段。而是创建一个模型,该模型将使用ForeignKey引用主模型:

class YourModel(models.Model):
    name = models.CharField(max_length=100)

class YourModelUpdateHistory(models.Model):
    your_model = models.ForeignKey('YourModel')
    updated = models.DateTimeField() 
这样,您可以为每个模型设置多个日期,同时保持数据库正常化。它还允许您在将来添加附加字段,其中包含有关每次更新的其他信息(例如谁更新了对象)

无论何时更新
YourModel
对象,都应该创建一个新的
YourModelUpdateHistory
对象。借助
save()
方法(Django每次保存对象时都会调用该方法),您甚至可以将其设置为自动完成此操作:


好的,我想我明白了-无论何时保存YourModel,YourModelUpdateHistory中都会用当前日期时间创建一个新条目,我可以在保存更新时在视图中设置它?我更新了我的帖子,举了一个在每次更新YourModel时自动创建YourModelUpdateHistory模型的例子。这样做了,它就起作用了。虽然我必须有“YourModelUpdateHistory.objects.create”(yourmodel=self,updated=timezone.now()),但它已经做到了。谢谢!
from django.utils import timezone

class YourModel(models.Model):
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        super(YourModel, self).save(*args, **kwargs)
        YourModelUpdateHistory.objects.create(your_model=self, updated=timezone.now())