Bot*_*ndr 3 django django-models
我需要获取继承了models.Model的每个类,以创建和更新字段。我可以通过向每个字段添加自定义保存方法来实现此目的,
def save(self, *args, **kwargs):
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(`models.Model`, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但这违反了Don'tRepeatYourself规则。
我试图覆盖models.Model:
class LogModel(models.Model):
created = models.DateTimeField(editable=False)
updated = models.DateTimeField()
def save(self, *args, **kwargs):
if not self.id:
self.created = timezone.now()
self.updated = timezone.now()
return super(LogModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
并使用LogModel而不是models.Model,但这失败,并显示错误E006(字段'x'与模型'y.logmodel'中的字段'x'冲突。
编辑
我的主要问题是如何向我的models.py中的所有模型添加自定义特定字段
您的基本模型必须是抽象的:
class LogModel(models.Model):
class Meta:
abstract = True
created = models.DateTimeField(editable=False)
updated = models.DateTimeField()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
# Use self._state.adding to check if this is a new instance,
# ID not being empty is not a guarantee that the instance
# exists in the database
# and if `update_fields` is passed, you must add the fields to the
# list or they won't be saved in the database.
if force_insert or self._state.adding:
self.created = timezone.now()
if update_fields and 'created' not in update_fields:
update_fields.append('created')
self.updated = timezone.now()
if update_fields and 'updated' not in update_fields:
update_fields.append('updated')
return super(LogModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是,如果重写该save()方法,则意味着它将无法以任何形式进行编辑。如果这是您想要的,那么最好使用auto_now和auto_now_add:
class LogModel(models.Model):
class Meta:
abstract = True
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4513 次 |
| 最近记录: |