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

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

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

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

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

Похожие вопросы