Jack
Jack

Reputation: 470

AttributeError at /admin/orders2/order/11/change/ 'NoneType' object has no attribute 'username'

Everything is working fine in my frontend, this problem is occurring when I'm trying to access the orders in my admin panel. In my console it also says:

cursor.close() sqlite3.ProgrammingError: Cannot operate on a closed database.

I tried to figure out where the problem was, but failed. Why is this throwing an error? Can anyone please help me solve this problem? Thanks in advance!

My models.py:

class Order(models.Model):
   user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
   ref_code = models.CharField(max_length=20)
   ordered = models.BooleanField(default=False)

   def __str__(self):
       return self.user.username

My admin.py:

class OrderAdmin(admin.ModelAdmin):
    list_display = ['user', 'ordered', 'being_delivered', 'received', 'refund_requested',
    'refund_granted', 'shipping_address', 'billing_address', 'payment', 'coupon']
    list_filter = ['ordered', 'being_delivered', 'received', 'refund_requested', 'refund_granted']
    list_display_links = ['user', 'shipping_address', 'billing_address', 'payment', 'coupon']
    search_fields = ['user__username', 'ref_code']

admin.site.register(Order, OrderAdmin)

Upvotes: 1

Views: 214

Answers (1)

F A
F A

Reputation: 348

Please change the following models.py-

From:

def __str__(self):
   return self.user.username

To:

def __str__(self):
    return str(self.id)

Reason: It's better not to return __str__ method as foreign key for models. A conflict happens in case if username is None, what'll then happen.

Upvotes: 2

Related Questions