There is a model of orders, where new orders with information fall, photo1
Part of the information is the model of sneakers, sometimes these sneakers need to be corrected, now this is done in the form of TabularInline, photo2 and photo3, there are a lot of sneakers and it takes a very long time to scroll through this drop-down list, is there a way to make a search by entering text, like search_fields?
admin.py
class SuitItemInOderInline(admin.TabularInline):
model = SuitInOder
extra = 0
class SuitOrderAdmin(admin.ModelAdmin):
inlines = [SuitItemInOderInline]
list_display = ('inst', 'created')
list_filter = ('status',)
class Meta:
model = OrderSuit
admin.site.register(OrderSuit, SuitOrderAdmin)
models.py
class SuitInOder(models.Model):
order = models.ForeignKey(OrderSuit, on_delete=models.CASCADE, verbose_name='Заказ', related_name='ordered_item')
item = models.ForeignKey(SuitItem, on_delete=models.CASCADE, verbose_name='Костюм', related_name='spb_item')
def __str__(self):
return f'{self.order} | {self.item.model.id} --- {self.item}'
def save(self, *args, **kwargs):
not_available = ['new', 'in_progress', 'completed']
if self.order.status in not_available:
self.item.in_stock = False
else:
self.item.in_stock = True
self.item.save(force_update=True)
super(SuitInOder, self).save(*args, **kwargs)
def delete(self):
self.item.in_stock = True
self.item.save(force_update=True)
super(SuitInOder, self).delete()
class Meta:
verbose_name = 'Костюм в заказе'
verbose_name_plural = 'Костюмы в заказе'
class OrderSuit(models.Model):
NEW = 'new'
IN_PROGRESS = 'in_progress'
COMPLETED = 'completed'
CANCELED = 'canceled'
choises = (
(NEW, 'Новый'),
(IN_PROGRESS, 'В работе'),
(COMPLETED, 'Выполнен'),
(CANCELED, 'Отменен')
)
name = models.CharField(max_length=32, verbose_name='Имя', blank=True)
phone_number = models.CharField(max_length=13, verbose_name='Номер телефона')
inst = models.CharField(max_length=64)
address = models.CharField(max_length=64, verbose_name='Адресс')
deliver_time = models.CharField(max_length=64, null=True, verbose_name='Время доставки')
comment = models.TextField(verbose_name='Комментарий')
status = models.CharField(max_length=32, choices=choises, null=True, verbose_name='Статус заказа')
created = models.DateTimeField(verbose_name='Время заказа', editable=False, default=datetime.now()+timedelta(hours=3))
def __str__(self):
return f'{self.name}'
def save(self, *args, **kwargs):
self.created = datetime.now() +timedelta(hours=3)
if self.id:
items = self.ordered_item.all()
for item in items:
item.save()
super(OrderSuit, self).save(*args, **kwargs)
class Meta:
verbose_name = 'Заказ костюма'
verbose_name_plural = 'Заказы костюмов'