Django 当字段不';在模式中不存在吗?

Django 当字段不';在模式中不存在吗?,django,django-models,database-migration,django-migrations,Django,Django Models,Database Migration,Django Migrations,我希望能够将一个字段标记为未使用,从而防止django在数据库模式中的相应列不存在时出错 我之所以这样做,是因为没有理由认为部署未使用的代码会使站点崩溃 差不多 class SomeObject(Model): some_field = models.CharField(unused=True) SomeObject.objects.all()[0].id # this line should not fail 现在它给 django.db.utils:OperationalError

我希望能够将一个字段标记为未使用,从而防止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,“字段列表”中的未知列'someobject.someu字段')
标准方法是使用
try:
除了
语句。以你为例,

try:
    SomeObject.objects.all()[0].id
exept OperationalError:
    pass # or whatever you want in this case
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

如果你经常使用模型,考虑重新定义它的GETQuyReSube函数。比如说,

try:
    SomeObject.objects.all()[0].id
exept OperationalError:
    pass # or whatever you want in this case
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

我想不出任何其他方法来处理这个问题。

标准方法是使用
try:
语句,除了
语句。以你为例,

try:
    SomeObject.objects.all()[0].id
exept OperationalError:
    pass # or whatever you want in this case
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

如果你经常使用模型,考虑重新定义它的GETQuyReSube函数。比如说,

try:
    SomeObject.objects.all()[0].id
exept OperationalError:
    pass # or whatever you want in this case
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

我想不出任何其他方法来处理这个问题。

您是否尝试过从模型定义中排除一些字段?如果它在模式中,它只会忽略它(我想)。您是否尝试过从您的模型定义中排除一些字段?如果它在模式中,它就会忽略它(我想)。如果我在一个高度使用的模型(比如用户)上添加这个字段,我不能将它应用于引用用户的每一个代码位。我还想抛出操作错误,如果它被抛出除了未使用的字段之外的原因。如果你经常使用模型,考虑重新定义它的GETQuyReSube函数。例如,class YourClass:def get_queryset(self,request):try:super(您的模型super,self)。get_queryset(request)expect-error,错误:if error.code==1054:pass else:raise我编辑我的答案以更清楚地显示代码。如果我在一个高度使用的模型(比如用户)上添加此字段,我无法将其应用于引用用户的每一位代码。我还想抛出操作错误,如果它被抛出除了未使用的字段之外的原因。如果你经常使用模型,考虑重新定义它的GETQuyReSube函数。例如,class YourClass:def get_queryset(self,request):try:super(您的模型super,self)。get_queryset(request)exept OperationalError,error:if error.code==1054:pass else:raise我编辑我的答案以更清楚地显示代码。