这是我在 models.py 中提出的解决方案:
from django.db import models
@classmethod
def model_field_exists(cls, field):
try:
cls._meta.get_field(field)
return True
except models.FieldDoesNotExist:
return False
models.Model.field_exists = model_field_exists
并像这样使用它:
Post.field_exists('title') # > True or False
问题来自外键,我的 Post 模型属于一个类别,此检查有效:
Post.field_exists('category') # > True
但是这个没有:
Post.field_exists('category_id') # > False
这是 db 中的实际字段名称,我需要像这样检查它。我怎样才能在 Django 中做到这一点?
原文由 lucaswxp 发布,翻译遵循 CC BY-SA 4.0 许可协议
hasattr(cls,field) 并非在所有情况下都有效,例如使用 mixins 的情况。一个安全的测试是:
或者