【问题标题】:Message Object has no attribute 'fields' when updating model field across apps跨应用更新模型字段时,消息对象没有属性“字段”
【发布时间】:2020-11-01 02:46:16
【问题描述】:

我有两个应用程序 menutable。在应用程序table,我有这个模型:

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)

在应用程序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)。我从一本书中得到了这个实现的建议。这是更新模型实例字段值的正确方法吗?谢谢。

【问题讨论】:

  • “我从一本书中得到了这个实现的建议。”烧掉那本书。或者也许买一本与 Django 相关的,因为没有 Django 相关的书会建议该代码。

标签: python django django-models


【解决方案1】:

只需设置属性即可。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2021-05-28
    • 2016-07-30
    • 2013-04-29
    • 2020-08-13
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多