Как ограничить встроенный набор запросов ForeignKey самим экземпляром в Django admin - PullRequest
1 голос
/ 24 февраля 2020

У меня есть 5 моделей, и их отношения следующие:

class A(models.Model):
    pass


class B(models.Model):
    a = models.ForeignKey(A)


class C(models.Model):
    b = models.ManyToManyField(B)


class D(models.Model):
    pass


class I(models.Model):
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)
    c = models.ForeignKey(C)
    d = models.ForeignKey(D)

Я решаю использовать django admin

class IAdminInline(admin.TabularInline):
    pass

class DAdmin(admin.ModelAdmin):
    inlines = [IAdminInline, ]


Страница администратора делает много запросов, если слишком много примеров I связаны с D, что отнимает много времени. Поэтому я отключаю действия Django по умолчанию, устанавливая formfield_for_foreignkey:

 def formfield_for_foreignkey(self, db_field, request, **kwargs):
        field = super().formfield_for_foreignkey(db_field, request, **kwargs)
        field.choices = [] # django will not make any queries if set choices

Вместо этого я использую ajax для получения соответствующих данных и использую javascript для визуализации выбранных виджетов и действий связывания, что облегчает добавление данных, так как эти виджеты связаны друг с другом. Страница загружается быстрее, но проблема в том, что приведенный выше код очистит I экземпляры начальных значений, которые, по-видимому, уже существуют на странице представления изменений.

Я хочу спросить , как я могу отобразить существующий встроенный объект select виджеты со своими ценностями? Предоставляет ли Django какие-либо функции для этого?

Я не нашел никаких решений, кроме использования ajax для отрисовки, по-видимому, существующих значений самостоятельно.

...