Message Object has no attribute 'fields' when updating model field across apps

I have two apps menu and table. In app table, I have this model:

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)

In one of the views of app menu, I have the following call:

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,
                  ...)

When my template calls this view, I receive this error message 'Table' object has no attribute 'fields'. Here, I am trying to update the value of field available of the instance being called (from True to False). And I got this implementation suggested from a book. Is this the right way to update model instance field value? Thanks.


Just set the attribute.

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

Though, it's questionable whether or not set_<field> methods like this are particularly useful. You could work with the object almost as easily:

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