我有以下模型:
class CommonModel(models.Model):
"""
Default Common Variables In Database
"""
class Meta:
abstract = True
created_by = models.ForeignKey(User,
related_name="%(app_label)s_%(class)s_created_by",
null=True, blank=True,on_delete=models.SET(get_sentinel_user))
modified_by = models.ForeignKey(User,
related_name="%(app_label)s_%(class)s_modified_by",
null=True, blank=True,on_delete=models.SET(get_sentinel_user))
deleted_by = models.ForeignKey(User,
related_name="%(app_label)s_%(class)s_deleted_by",
null=True, blank=True,on_delete=models.SET(get_sentinel_user))
is_deleted = models.BooleanField(default=False)
created_date = models.DateTimeField(blank=True)
deleted_date = models.DateTimeField(null=True, blank=True)
modified_date = models.DateTimeField(auto_now=True)
class Article(CommonModel):
title = models.CharField(max_length=256)
intro_image = models.ImageField(null=True, blank=True, upload_to=doc_hash)
description = models.TextField(null=True, blank=True)
url = models.CharField(max_length=256, null=True, blank=True)
slug = models.SlugField(editable=False)
我正在ipython中尝试以下
> Article._meta.get_fields()
(<django.db.models.fields.AutoField: id>,
<django.db.models.fields.related.ForeignKey: created_by>,
<django.db.models.fields.related.ForeignKey: modified_by>,
<django.db.models.fields.related.ForeignKey: deleted_by>,
<django.db.models.fields.BooleanField: is_deleted>,
<django.db.models.fields.DateTimeField: created_date>,
<django.db.models.fields.DateTimeField: deleted_date>,
<django.db.models.fields.DateTimeField: modified_date>,
<django.db.models.fields.CharField: title>,
<django.db.models.fields.files.ImageField: intro_image>,
<django.db.models.fields.TextField: description>,
<django.db.models.fields.CharField: url>,
<django.db.models.fields.SlugField: slug>
我尝试使用include_parents=False
> Article._meta.get_fields(include_parents=False)
(<django.db.models.fields.AutoField: id>,
<django.db.models.fields.related.ForeignKey: created_by>,
<django.db.models.fields.related.ForeignKey: modified_by>,
<django.db.models.fields.related.ForeignKey: deleted_by>,
<django.db.models.fields.BooleanField: is_deleted>,
<django.db.models.fields.DateTimeField: created_date>,
<django.db.models.fields.DateTimeField: deleted_date>,
<django.db.models.fields.DateTimeField: modified_date>,
<django.db.models.fields.CharField: title>,
<django.db.models.fields.files.ImageField: intro_image>,
<django.db.models.fields.TextField: description>,
<django.db.models.fields.CharField: url>,
<django.db.models.fields.SlugField: slug>
它显示相同的结果。
我认为它不应显示从CommonModel
继承的字段
有人可以解释在这种情况下include_parents=False
会做什么。
答案 0 :(得分:0)
include_parents :
True
默认情况下。递归包括在父类上定义的字段。如果设置为False
,则get_fields()
仅搜索直接在当前模型上声明的字段。直接从抽象模型或代理类继承的模型中的字段被认为是本地的,而不是父级的。
在您的情况下,将CommonModel
声明为abstract
模型。因此,您在CommonModel
中的所有字段都被视为本地字段。我认为您为什么会有相同的结果。