Задать вопрос
vikkyshostak
@vikkyshostak
< This head full of dreams.

Django 2.х Admin. Как сделать выборку одного поля, в зависимости от выбранного элемента в другом (ForeignKey)?

Приветствую!

Имеем чистый проект с Django 2.0.1 на Python 3.6.3.

Вопрос: как сделать выборку одного поля ForeignKey, в зависимости от выбранного элемента в другом поле (тоже ForeignKey)? Знаю, что теперь за такие поля в админке отвечает Select2, но так и не смог найти развёрнутого описания всех возможностей/методов, касательно адмнки Django (про JS-скрипт всё итак ясно).

=== EDITED ===

Сейчас у меня вот такая структура:

tours/models.py:

class Tours(models.Model):
    country = models.ForeignKey(Countries, on_delete=None, default=None)
    resort = models.ForeignKey(Resorts, on_delete=None, null=True, default=None)
    ...

tours/admin.py:

@admin.register(Tours)
class ToursAdmin(admin.ModelAdmin):
    list_display = ('country', 'resort',)
    autocomplete_fields = ('country', 'resort',)

countries/models.py:

class Countries(models.Model):
    name = models.CharField(max_length=255)

class Resorts(models.Model):
    name = models.CharField(max_length=255)
    country = models.ForeignKey(Countries, on_delete=models.CASCADE, default=None)

countries/admin.py:

class ResortsInlineAdmin(admin.StackedInline):
    model = Resorts

@admin.register(Countries) 
class CountriesAdmin(admin.ModelAdmin):
    list_display = ('name',)
    search_fields = ('name',)
    inlines = [ResortsInlineAdmin,]

@admin.register(Resorts)
class ResortsAdmin(admin.ModelAdmin):
    list_display = ('name', 'country',)
    search_fields = ('name',)

В админке модель Resorts присоединяется к Countries, как inlines = [...], то есть при создании объекта Countries — к ней же линкуются все её Resorts.

Выбрали страну в поле Countries — в поле Resorts уже все отсортировано только по этой стране. Иначе — выводится полностью всё. Нашёл пример необходимого функционала на PHP + jQuery — webersoft.ru/lab/sqlcelect

Буду рад толковым комментариям и юзкейсам.
Заранее спасибо!
  • Вопрос задан
  • 1783 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Sovetnikov
технический директор pulsprodaj.ru
Из коробки django-admin не поддерживает такие обновления на самой странице, только если в форме зададите свой queryset для поля которое соответствует FK из модели, но вы видимо хотите сделать именно на странице.

Если у вас рядом на форме два FK поля, то пишите JS, который будет фильтровать второй в зависимости от значения первого. Только вам надо будет дополнительно на страницу в JS передать данные о связях второго FK с первым, чтобы фильтровать.

А где у вас в модели страна с курортом связана?
Вы же страну для Tours выбирать хотите?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽