Coverage for src/orders/admin.py: 53%

32 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.orders.models import Order 

6 

7 

8@admin.register(Order) 

9class OrderAdmin(admin.ModelAdmin): 

10 def product_display(self, obj): 

11 if obj.inventory: 

12 product = getattr(obj.inventory, 'product', None) 

13 

14 if product: 

15 return str(product) 

16 

17 return str(obj.inventory) 

18 

19 return '-' 

20 

21 product_display.short_description = 'Product' 

22 

23 def product_info(self, obj): 

24 if obj.inventory: 

25 product = getattr(obj.inventory, 'product', None) 

26 

27 if product: 

28 app_label = product._meta.app_label 

29 model_name = product._meta.model_name 

30 url = reverse( 

31 f'admin:{app_label}_{model_name}_change', args=[product.id] 

32 ) 

33 

34 return format_html('<a href="{}">{}</a>', url, str(product)) 

35 

36 return str(obj.inventory) 

37 

38 return '-' 

39 

40 product_info.short_description = 'Product' 

41 product_info.allow_tags = True 

42 

43 list_display = ( 

44 'id', 

45 'user', 

46 'product_display', 

47 'status', 

48 'quantity', 

49 'created_at', 

50 'order_group', 

51 ) 

52 list_filter = ('status', 'created_at') 

53 search_fields = ('user__username', 'order_group') 

54 readonly_fields = ('created_at', 'product_info') 

55 ordering = ('-created_at',) 

56 exclude = ('content_type', 'object_id')