gpt4 book ai didi

python - Django 模型继承和字段上的 hasattr()

转载 作者:行者123 更新时间:2023-11-28 22:41:51 26 4
gpt4 key购买 nike

我正在努力解决这个问题。假设我的模型在以下 testapp 应用 models.py 文件中:

from django.db import models

class Parent(models.Model):
my_attribute = models.BooleanField(default=False)

class Meta:
abstract = True

class Child(Parent):
child_stuff = models.CharField(max_length=255, blank=True)

现在,如果我尝试这个(例如在控制台中)

(交互式控制台)

from testapp.models import Child

hasattr(Child, 'my_attribute')

错误

c = Child()

hasattr(c, 'my_attribute')

正确

这对我来说真的很奇怪(因为 Parent 是抽象的)。我如何检查 Child 的字段?我期待第一个 hasattr 返回 True。我应该尝试通过 _meta 按名称获取字段并检查它是否返回字段吗?对于一个简单的需求来说似乎很棘手......

干杯!

最佳答案

Django 1.8 有一个记录的 _meta应用程序接口(interface)。

您可以使用 get_fields ,

my_attribute in [field.name for field in Child._meta.get_fields()]

请注意,get_fields 有一个 include_parents 选项,您可以使用它从父模型中包含或排除字段。

或者您可以使用 get_field ,并捕获 FieldDoesNotExist 异常。

from django.db.models import FieldDoesNotExist

try:
field = Child._meta.get_field('my_attribute')
except FieldDoesNotExist:
# field does not exist
pass

关于python - Django 模型继承和字段上的 hasattr(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com