您好我想知道如何创建一些字段并将它们转换为mixin。
我们说我有以下内容。
class Supplier(models.Model):
name = models.CharField(max_length=128)
created_by = models.ForeignKey(get_user_model(), related_name='%(class)s_created_by')
modified_by = models.ForeignKey(get_user_model(), related_name='%(class)s_modified_by')
created_date = models.DateTimeField(editable=False)
modified_date = models.DateTimeField()
def save(self, *args, **kwargs):
if not self.id:
self.created_date = timezone.now()
self.modified_date = timezone.now()
return super(Supplier, self).save(*args, **kwargs)
我想创建一个mixin,以避免每次将最后4个字段写入不同的模型。
这是我要创建的mixin:
class AuditMixin(models.Model):
created_by = models.ForeignKey(get_user_model(), related_name='%(class)s_created_by')
modified_by = models.ForeignKey(get_user_model(), related_name='%(class)s_modified_by')
created_date = models.DateTimeField(editable=False)
modified_date = models.DateTimeField()
def save(self, *args, **kwargs):
if not self.id:
self.created_date = timezone.now()
self.modified_date = timezone.now()
return super(Supplier, self).save(*args, **kwargs)
class Supplier(AuditMixin):
name = models.Charfield(max_length=128)
如何确保related_name与mixin包含在的类相关?同样在保存功能中,如何确保返回包含mixin的类(按照最后一行)?
谢谢!
答案 0 :(得分:2)
首先,在任何super
调用中,您必须始终使用当前类。因此它始终为super(AuditMixin, self)...
,您的问题不适用。
如果您使用related_name
语法,Django本身会在%(class)s
中替换当前的类名,所以再没有其他任何事情要做。请参阅the model inheritance docs。