class ColorChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
return format_html("{} <b>{}</b>",
mark_safe("<img src=%s style='max-width: 100px;'/>" % obj.image.url),
obj.prop
)
# return mark_safe("<img src='%s' style='max-width: 100px;'/>" % (obj.image.url) )
class CurrentProductModelAdmin(admin.ModelAdmin):
list_display = '__str__', 'product', 'color', 'packing', 'price',
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'color':
return ColorChoiceField(queryset=Color.objects.all())
return super().formfield_for_foreignkey(db_field, request, **kwargs)
return format_html("{} <b>{}</b>",
mark_safe("<img src='%s' style='max-width: 100px;'/>" % obj.image.url),
obj.prop
)
<div class="form-row field-color">
<div>
<label class="required" for="id_color">Color:</label>
<div class="related-widget-wrapper" data-model-ref="Цвет">
<select name="color" required="" id="id_color">
<option value="">---------</option>
<option value="1"> Зелёный</option>
<option value="2"> Красный</option>
<option value="3" selected=""> Желтый</option>
</select>
<a class="related-widget-wrapper-link change-related" id="change_id_color" data-href-template="/admin/product/color/__fk__/change/?_to_field=id&_popup=1" data-popup="yes" title="Изменить выбранный объект типа " Цвет""="" href="/admin/product/color/3/change/?_to_field=id&_popup=1"><img src="/static/admin/img/icon-changelink.svg" alt="Изменить"></a><a class="related-widget-wrapper-link add-related" id="add_id_color" data-popup="yes" href="/admin/product/color/add/?_to_field=id&_popup=1" title="Добавить ещё один объект типа " Цвет""=""><img src="/static/admin/img/icon-addlink.svg" alt="Добавить"></a><a class="related-widget-wrapper-link delete-related" id="delete_id_color" data-href-template="/admin/product/color/__fk__/delete/?_to_field=id&_popup=1" data-popup="yes" title="Удалить выбранный объект типа " Цвет""="" href="/admin/product/color/3/delete/?_to_field=id&_popup=1"><img src="/static/admin/img/icon-deletelink.svg" alt="Удалить"></a><a class="related-widget-wrapper-link view-related" id="view_id_color" data-href-template="/admin/product/color/__fk__/change/?_to_field=id" title="View selected Цвет" href="/admin/product/color/3/change/?_to_field=id"><img src="/static/admin/img/icon-viewlink.svg" alt="Просмотреть"></a>
</div>
</div>
</div>
class Color(models.Model):
"""модель цвета для товара"""
autoregister_model=True
prop = models.CharField(max_length=500, verbose_name='Описание цвета')
image = ThumbnailerImageField( upload_to=upload_color_path_handler, verbose_name='Изображение',
resize_source=dict(size=(72, 72), sharpen=True))
class Meta:
verbose_name = "Цвет"
verbose_name_plural = "Цвета"
def __str__(self):
return f'{self.prop}'
class CurrentProduct(models.Model):
"""конкретный товар цвет-фасовка-цена"""
vendorСode = models.CharField(max_length=100, verbose_name='Артикул', primary_key=True)
price = models.PositiveIntegerField(verbose_name='Цена', default='0')
packing = models.ForeignKey(Packing, verbose_name='Фасовка',
related_name='current_products', on_delete=models.SET_NULL,
null=True, blank=True)
color = models.ForeignKey(Color, verbose_name='Цвет',
related_name='current_products', on_delete=models.SET_NULL,
null=True, blank=True)
product = models.ForeignKey(Product, related_name='current_products', verbose_name='Товар',
on_delete=models.SET_NULL, null=True, blank=True)
storages = models.ManyToManyField(Storage, verbose_name='Склады с наличием',blank=True)
class Meta:
verbose_name = "Конкретный товар"
verbose_name_plural = "Конкретные товары"
ordering = ['product']
def __str__(self):
return self.vendorСode
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda r: False, # disables it
# '...
}
def index(self, request, extra_context=None):
"""
Display the main admin index page, which lists all of the installed
apps that have been registered in this site.
"""
app_list = self.get_app_list(request)
context = {
**self.each_context(request),
'title': self.index_title,
'app_list': app_list,
**(extra_context or {}),
}
request.current_app = self.name
return TemplateResponse(request, self.index_template or
'admin/index.html', context)
def to_representation(self, instance):
response = super().to_representation(instance)
if instance.avatar.name:
response['avatar'] = response['avatar']
else:
response['avatar'] = "http://localhost:8000/media/images/avatar-test.jpg"
return response