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 = 'Заказы костюмов'
If these are foreignKey fields, use raw_id_fields so you can search them in another window and it will make the load faster.
Photo1 need to use autocomplete_fields and register a new model for example SuitSearch, which has a search_fields which refers to model__name
admin.py
class SuitSearch(admin.ModelAdmin):
search_fields = ('model__name',)
class Meta:
model = SuitItem
admin.site.register(SuitItem, SuitSearch)
class SuitItemInOderInline(admin.TabularInline):
model = SuitInOder
autocomplete_fields = ('item',)
extra = 0
class SuitOrderAdmin(admin.ModelAdmin):
inlines = [SuitItemInOderInline]
list_display = ('inst', 'created')
list_filter = ('status',)
class Meta:
model = OrderSuit
admin.site.register(OrderSuit, SuitOrderAdmin)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.