У меня есть 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 для отрисовки, по-видимому, существующих значений самостоятельно.