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
« 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.orders.models import Order
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)
14 if product:
15 return str(product)
17 return str(obj.inventory)
19 return '-'
21 product_display.short_description = 'Product'
23 def product_info(self, obj):
24 if obj.inventory:
25 product = getattr(obj.inventory, 'product', None)
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 )
34 return format_html('<a href="{}">{}</a>', url, str(product))
36 return str(obj.inventory)
38 return '-'
40 product_info.short_description = 'Product'
41 product_info.allow_tags = True
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')