首页 > 解决方案 > 跨应用更新模型字段时,消息对象没有属性“字段”

问题描述

我有两个应用程序menutable. 在 apptable中,我有这个模型:

class Table(models.Model):
    available = models.BooleanField(verbose_name="Availability", default=True)

    def set_availability(self, avail=False):
        self.fields['available'] = avail
        self.save()

    def __str__(self):
        return "Table " + str(self.id_num)

在 app 的一个视图中menu,我有以下调用:

from table.models import Table

def menu_category_view(request, table_pk):
    table = Table.objects.get(pk=table_pk)
    if table.available:
        table.set_availability(False)
    ...
    return render(request,
                  ...)

当我的模板调用此视图时,我收到此错误消息'Table' object has no attribute 'fields'。在这里,我试图更新available被调用实例的字段值(从 True 到 False)。我从一本书中得到了这个实现的建议。这是更新模型实例字段值的正确方法吗?谢谢。

标签: pythondjangodjango-models

解决方案


只需设置属性。

    def set_availability(self, avail=False):
        self.available = avail
        self.save()

不过,这样的set_<field>方法是否特别有用是值得怀疑的。您几乎可以轻松地使用该对象:

    if table.available:
        table.available = False
        table.save()

推荐阅读