class ProductImageInstanceInline(admin.TabularInline):
fields = ['name', 'img', 'main', 'order', 'published']
extra = 1
min_num = 1
model = ProductImage
class CategoryInlineAdmin(admin.TabularInline):
model = Product.category.through
extra = 0
min_num = 1
class ProductReviewInstanceInline(admin.TabularInline):
model = ProductReview
extra = 0
min_num = 1
class ProductAdmin(admin.ModelAdmin):
fields = ['name',
'name_short',
'name_breadcrumb',
'slug',
'listdesc',
'temperature',
'techtable',
'content1',
'content2',
'content3',
'content4',
'content5',
'techfile',
'article',
'product',
'order',
'published',
]
list_display = ('name', 'sluglist_view')
inlines = [ProductImageInstanceInline, CategoryInlineAdmin, ProductReviewInstanceInline]
def sluglist_view(self, obj):
html = '<a target="_blank" href="/catalog/%s">на сайте</a>' % (obj.slug)
return mark_safe(html)
sluglist_view.short_description = 'Ссылка на сайте'
def save_formset(self, request, form, formset, change):
if formset.model == ProductImage:
msgimage = 'Изображения товара уже имеет главное изображение'
msgnimage = 'Изображения товара не имеет главное изображение'
instances = formset.save(commit=False)
if len(instances) > 0:
l = [ i for i in instances if i.main == True ]
if len(l) > 1:
raise ValidationError(msgimage)
c = ProductImage.objects.filter(product_id = instances[0].product_id).filter(main = True).count()
if c != 0 and len(l) == 1:
raise ValidationError(msgimage)
if c == 0 and len(l) == 0:
raise ValidationError(msgnimage)
if formset.model == Product.category.through:
msg = 'Категории товара уже есть главная'
msgn = 'Категории товара не имеет главной'
msgd = 'Категории повторяются'
instances = formset.save(commit=False)
if len(instances) > 0:
l = [ i for i in instances if i.main == True ]
if len(l) > 1:
raise ValidationError(msg)
c = Product.category.through.objects.filter(product_id = instances[0].product_id).filter(main = True).count()
if c != 0 and len(l) == 1:
raise ValidationError(msg)
if c == 0 and len(l) == 0:
raise ValidationError(msgn)
idsobjs = Product.category.through.objects.filter(product_id = instances[0].product_id).all()
ids = [ i.category_id for i in instances ]
idsobjsl = [ i.category_id for i in idsobjs ]
ids.extend(idsobjsl)
if len(ids) != len(set(ids)):
raise ValidationError(msgd)
formset.save()
Требуется не ошибка 500, а перехват её с выводом сообщения об ошибке валидации