Встроенный класс не работает в админке django
Я создал модель ProductAttributes, которая имеет ForeignKey из модели Product Теперь я пытаюсь создать административную панель для добавления продукта с помощью django admin Я добавляю ProductAttributes в Product admin с помощью TabularInline, но это не работает
это модели и классы администраторов
#models
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
description = models.TextField(null=True, blank=True)
introduction = models.TextField(null=True, blank=True)
unit_price = models.DecimalField(
max_digits=12,
decimal_places=2,
validators=[MinValueValidator(1)])
inventory = models.IntegerField(validators=[MinValueValidator(0)])
last_update = models.DateTimeField(auto_now=True)
collection = models.ForeignKey(Collection, on_delete=models.PROTECT, related_name='products')
promotions = models.ManyToManyField(Promotion, blank=True)
def __str__(self) -> str:
return self.title
class Meta:
ordering = ['title']
class ProductAttributes(models.Model):
Product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="attributes")
attribute = models.CharField(max_length=255)
#admin
class ProductAttributesInline(admin.TabularInline):
model = models.ProductAttributes
@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin):
autocomplete_fields = ['collection']
prepopulated_fields = {
'slug': ['title']
}
actions = ['clear_inventory']
inlines = [ProductAttributesInline]
list_display = ['title', 'unit_price',
'inventory_status', 'collection_title']
list_editable = ['unit_price']
list_filter = ['collection', 'last_update', InventoryFilter]
list_per_page = 10
list_select_related = ['collection']
search_fields = ['title']
def collection_title(self, product):
return product.collection.title
@admin.display(ordering='inventory')
def inventory_status(self, product):
if product.inventory < 10:
return 'Low'
return 'OK'
@admin.action(description='Clear inventory')
def clear_inventory(self, request, queryset):
updated_count = queryset.update(inventory=0)
self.message_user(
request,
f'{updated_count} products were successfully updated.',
messages.ERROR
)
class Media:
css = {
'all': ['store/style.css']
}
Атрибуты продукта не отображаются в админке продукта
В оригинальном проекте я создал еще один инлайн для ProductImage и он работает, но когда я пытаюсь удалить этот инлайн, он не удаляется из админки продукта
Во-первых, не забывайте проверять все миграции, и было бы лучше хранить ваши модели в models.py и не смешивать их с изменениями, связанными с администрированием. Я бы рекомендовал вам писать их в admin.py.
Вы можете использовать как изображения, так и атрибуты следующим образом:
class ProductAttributesInlineAdmin(admin.TabularInline):
model = ProductAttributes
extra = 2
@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin):
...
inlines = [ProductAttributesInlineAdmin, ProductImageInlineAdmin]