我最近在一篇与Django相关的博客文章中看到了这个!
class Client(models.Model):
name = models.CharField(max_length=255, required=True)
# .. other fields
class Meta:
abstract = True
阅读文档后,我仍然不明白"abstract = True"的目的是什么。 任何帮助都将是有用的。谢谢!
我最近在一篇与Django相关的博客文章中看到了这个!
class Client(models.Model):
name = models.CharField(max_length=255, required=True)
# .. other fields
class Meta:
abstract = True
阅读文档后,我仍然不明白"abstract = True"的目的是什么。 任何帮助都将是有用的。谢谢!
created_at
和updated_at
定义两个时间戳,那么我们可以从一个简单的抽象模型开始:class <b>UpdatedCreated</b>(models.Model):
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
<b>abstract = True</b>
class Foo(<b>UpdatedCreated</b>):
other=models.CharField()
class Bar(<b>UpdatedCreated</b>):
another=models.CharField()
class Qux(<b>UpdatedCreated</b>):
an_another=models.CharField()
created_at
和updated_at
字段。如果我们在UpdatedCreated
上定义方法,那么这些模型将会继承它们。例如,我们可以创建一个指定项目是否仍然“存在”的字段:from django.utils.timezone import now
class UpdatedCreated(models.Model):
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
@property
def <b>alive</b>(self):
return (now() - updated_at).days < 7
class Meta:
<b>abstract = True</b>
因此,它是一种通过同一可重复使用的组件轻松扩展模型的方法。
# "myapp/models.py"
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
class Student(Person):
pass
python manage.py makemigrations && python manage.py migrate
# "myapp/models.py"
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
class Meta:
abstract = True # Here
class Student(Person):
pass
然后,运行以下命令:
python manage.py makemigrations && python manage.py migrate