Coverage for src/shopping_bags/admin.py: 52%
31 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-08-04 12:59 +0300
« prev ^ index » next coverage.py v7.9.2, created at 2025-08-04 12:59 +0300
1from django.contrib import admin
2from django.utils.html import format_html
3from django.urls import reverse
5from src.shopping_bags.models import ShoppingBag
8@admin.register(ShoppingBag)
9class ShoppingBagAdmin(admin.ModelAdmin):
10 def product_display(self, obj):
11 if obj.inventory:
12 product = getattr(obj.inventory, 'product', None)
13 if product:
14 return str(product)
16 return str(obj.inventory)
18 return '-'
20 product_display.short_description = 'Product'
22 def product_info(self, obj):
23 if obj.inventory:
24 product = getattr(obj.inventory, 'product', None)
25 if product:
26 app_label = product._meta.app_label
27 model_name = product._meta.model_name
28 url = reverse(
29 f'admin:{app_label}_{model_name}_change', args=[product.id]
30 )
31 return format_html('<a href="{}">{}</a>', url, str(product))
33 return str(obj.inventory)
35 return '-'
37 product_info.short_description = 'Product'
38 product_info.allow_tags = True
40 list_display = (
41 'id',
42 'user',
43 'product_display',
44 'quantity',
45 'created_at',
46 )
47 search_fields = ('user__username',)
48 readonly_fields = ('created_at', 'product_info')
49 ordering = ('-created_at',)
50 exclude = ('content_type', 'object_id')