Задать вопрос

Вывод данных в зависимости от is_active, Django-admin?

Имею две модели. Первая
class Currency(models.Model):

    # код валюты, пример UAH
    code = models.CharField(_('code'), max_length=3, unique=True)

    # название валюты, пример Украинская гривна
    name = models.CharField(_('name'), max_length=35, unique=True)

    # символ валюты, пример $
    symbol = models.CharField(_('symbol'), max_length=4, blank=True)

    # активность валюты
    is_active = models.BooleanField(_('active'), default=True, help_text=_('The currency will be available.'))


Вторая:

class Сourse(models.Model):
   
    # входящая валюта
    currency_from = models.ForeignKey(Currency, verbose_name=_('_from'), related_name="currency_from")

    # исходящая валюта
    currency_to = models.ForeignKey(Currency, verbose_name=_('_to'), related_name="currency_to")

    # по курсу 1 к:
    course = models.DecimalField(verbose_name=_('course'), max_digits=20, decimal_places=10,
                                 help_text="Курс по текущей паре")


В моделе Currency более 100 записей, но из них актывны только 5 (is_active), при заполнении второй модели в списках все записи с первой модели для выбора. Как ограничить выбор по актывным записям с первой моделе? Удалить из нее лишнее не вариант :)
  • Вопрос задан
  • 3405 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Django: создание backend-приложений
    7 недель
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
Решения вопроса 2
mututunus
@mututunus
Backend developer (Python, Golang)
Через форму:
class CourseForm(forms.ModelForm):
    currency_from = forms.ModelChoiceField(queryset=Currency.objects.filter(is_active=True))
Ответ написан
Для админки проще всего использовать formfield_for_foreignkey. Примерно так.

class CourseAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "currency":
            kwargs["queryset"] = Currency.objects.filter(is_active=True)
        return super(CourseAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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