当架构中不存在字段时,如何防止 django 出错?
Posted
技术标签:
【中文标题】当架构中不存在字段时,如何防止 django 出错?【英文标题】:How do I prevent django from erroring out when a field doesn't exist in the schema? 【发布时间】:2020-05-28 08:26:19 【问题描述】:我希望能够将一个字段标记为未使用,从而防止 django 在数据库架构中的相应列不存在时出错。
我想这样做是因为部署未使用的代码不会导致网站崩溃。
类似
class SomeObject(Model):
some_field = models.CharField(unused=True)
SomeObject.objects.all()[0].id # this line should not fail
现在它给了
django.db.utils:OperationalError: (1054, "Unknown column 'someobject.some_field' in 'field list'")
【问题讨论】:
您是否尝试过将some_field
从您的模型定义中排除?如果它在架构中,它将忽略它(我认为)。
【参考方案1】:
标准方法是使用try:
和except
语句,reference。在您的示例中,
try:
SomeObject.objects.all()[0].id
exept OperationalError:
pass # or whatever you want in this case
如果您经常使用模型,请考虑重新定义其 get_queryset 函数。例如,
class YourClass:
def get_queryset(self, request):
try:
super(your-model-super, self).get_queryset(request)
exept OperationalError, error:
if error.code == 1054:
pass
else:
raise
我想不出任何其他方法来处理这个问题。
【讨论】:
如果我在一个高度使用的模型上添加这个字段,比如说,用户,我不能将这个应用于引用用户的每一位代码。如果出于未使用字段以外的原因抛出 OperationalError,我也想抛出它。 如果您经常使用模型,请考虑重新定义其 get_queryset 函数。例如 class YourClass: def get_queryset(self, request): try: super(your-model-super, self).get_queryset(request) exept OperationalError, error: if error.code == 1054: pass else: raise I edit我的答案是为了更清楚地显示代码。以上是关于当架构中不存在字段时,如何防止 django 出错?的主要内容,如果未能解决你的问题,请参考以下文章
在 Django Admin 中创建自定义显示字段(models.py 中不存在)
在 iTunes Connect 中创建用户时出错:年份无效
Django:如何检查自定义小部件定义中是不是存在字段错误?
Django REST Framework:当 POST 上存在额外字段时引发错误