Django Admin list_per_page для поля множественного выбора m2m

У меня есть настройка отношений m2m, и она работает на стороне администратора. однако он перечисляет все 60 000 записей (как и должно быть), чтобы сделать эту работу более эффективной при загрузке, как ограничить количество возвращаемых записей. Я просмотрел параметр list_per_page, чтобы добавить его в admin.py, но, похоже, это работает для списка объектов, мне нужно, чтобы это было в поле multiselect.

Любые идеи?

# models.py

class Sample(models.Model):
    sample_id = models.AutoField(primary_key=True)
    area_easting = models.IntegerField(choices = EASTING_CHOICES)
    area_northing = models.IntegerField(choices = NORTHING_CHOICES)
    context_number = models.IntegerField()
    sample_number = models.IntegerField()
    sample_type = models.CharField(max_length=200, default='', blank=True, null=True, choices = MATERIALS)
    weight = models.DecimalField(max_digits=6, decimal_places=2)
    description = models.CharField(max_length=500, default='', blank=True, null=True)
    recovery_method = models.CharField(max_length=200, default='', blank=True, null=True, choices = RECOVERY_METHODS)
    taken_by = models.ForeignKey(settings.AUTH_USER_MODEL, db_column='taken_by', on_delete = models.PROTECT, related_name='depotsample_taken_by')
    comments = models.CharField(max_length=1000, default='', blank=True, null=True)

    def __str__(self):
        return str(self.sample_number)


    class Meta:
        db_table = 'kap\".\"sample'
        #ordering = ["sample_id"]
        managed = True
        #verbose_name_plural = "samples"

class Container(models.Model):
    container_id = models.AutoField(primary_key=True)
    container_name = models.CharField(max_length=50, blank=True, null=True)
    container_type = models.CharField(max_length=50, blank=True, null=True)
    location_id = models.ForeignKey(Location, db_column='location_id', on_delete = models.PROTECT)

    samples = models.ManyToManyField('Sample')
    icon_desc = models.ForeignKey(Icon, db_column='icon_desc', null=True, blank=True, default='Box',on_delete = models.PROTECT)


    def __str__(self):
        return self.container_name

Сторона администратора:

# admin.py

class ContainerAdmin(admin.ModelAdmin):
    list_display = ('container_name',)
    search_fields = ['container_name']
    filter_horizontal = ('samples',)
    list_per_page = 5 # No of records per page

class SampleAdmin(admin.ModelAdmin):
    list_display = ('sample_number',)
    search_fields = ['sample_number']
    list_per_page = 5 # No of records per page 


admin.site.register(Container, ContainerAdmin)
admin.site.register(Sample, SampleAdmin)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
237
1

Ответы 1

Вы можете изменить набор запросов ModelMultipleChoiceField.

class ContainerAdminForm(ModelForm):
    class Meta:
        model = Container
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        form = super().__init__(*args, **kwargs)
        # Limit samples to 10
        self.fields['samples'].queryset = Sample.objects.all()[:10]

class ContainerAdmin(admin.ModelAdmin):
    list_display = ('container_name',)
    search_fields = ['container_name']
    filter_horizontal = ('samples',)
    form = ContainerAdminForm

Спасибо, но я бы предпочел не ограничивать поле множественного выбора, я бы предпочел несколько простых стрелок влево/вправо или что-то подобное для разбиения на страницы набора запросов в поле.

Spatial Digger 25.02.2019 19:54

Нужна ли вам нумерация страниц или вы можете использовать поиск с автозаполнением? Если это так, вы можете попробовать django-autocomplete-light.readthedocs.io

Kristiyan Gospodinov 25.02.2019 21:52

Я вернулся к этому, я реализовал предложенное решение, но ограничение его до 10 (или любого другого числа) позволяет выбрать только эти 10. С записями ca.60k, как я могу сократить время поиска по всему списку? Я собираюсь посмотреть на автозаполнение дальше.

Spatial Digger 06.03.2019 12:07

Другие вопросы по теме