Django管理中的搜索模型

2024-06-25 06:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个订单模型,其中包含信息的新订单下降,如图1所示

1

部分信息是运动鞋的型号,有时这些运动鞋需要更正,现在这是以表格、照片2和照片3的形式完成的,有很多运动鞋,在这个下拉列表中滚动需要很长时间,有没有办法通过输入文本进行搜索,比如搜索字段

管理员

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 = 'Заказы костюмов'

2

3


Tags: nameinselftrueverbosemodelssavedef
2条回答

如果这些是foreignKey字段,请使用raw_id_字段,以便您可以在另一个窗口中搜索它们,这将加快加载速度

Photo1 需要使用autocomplete_字段并注册一个新模型,例如SuiteSearch,它有一个指向模型名称的搜索字段

管理员

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)

相关问题 更多 >