簡體   English   中英

在 django 管理員中搜索模型

[英]search models in django admin

有一個 model 的訂單,其中有信息的新訂單下降,照片1

1

部分資料是球鞋的model,有時這些球鞋需要修正,現在以TabularInline、photo2和photo3的形式完成,球鞋很多,滾動這個drop需要很長時間-down 列表,有沒有辦法通過輸入文本進行搜索,例如 search_fields?

管理員.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)

模型.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

如果這些是 foreignKey 字段,請使用 raw_id_fields 以便您可以在另一個 window 中搜索它們,這將使加載更快。

Photo1需要使用 autocomplete_fields 並注冊一個新的 model 例如 SuitSearch,它有一個 search_fields 引用 model__name

管理員.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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM