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

1from django.contrib import admin 

2from django.utils.html import format_html 

3from django.urls import reverse 

4 

5from src.shopping_bags.models import ShoppingBag 

6 

7 

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) 

15 

16 return str(obj.inventory) 

17 

18 return '-' 

19 

20 product_display.short_description = 'Product' 

21 

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

32 

33 return str(obj.inventory) 

34 

35 return '-' 

36 

37 product_info.short_description = 'Product' 

38 product_info.allow_tags = True 

39 

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')