Хобрук: Ваш путь к мастерству в программировании

Как использовать can_add_related в Django Admin


  • да, вы можете просмотреть его здесь: dpaste.com/740431 30.04.2012

Ответы:


1

Это, вероятно, приходит поздно. Но для справки других зрителей,

def get_form(self, request, obj=None, **kwargs):
    form = super(ProductAdmin, self).get_form(request, obj, **kwargs)
    form.base_fields['category'].widget.can_add_related = False
    return form
27.06.2013
  • для всех, кто пытается это сделать, это просто работает, даже с Django 1.7 - но не со встроенными строками. Для них я закончил перезапись виджетов, как объяснил @Seether, см. здесь: ссылка 08.05.2015
  • См. этот ответ на вопрос, связанный с комментарием @normic, для более краткого решения для встроенных строк (с использованием get_formset вместо get_form) stackoverflow.com/a /37558444/1302095 31.08.2016

  • 2

    can_add_related кажется атрибутом виджета, а не поле, поэтому попробуйте:

    self.fields['person'].widget.can_add_related = False
    
    30.04.2012

    3

    Альтернативный подход с изменением параметров виджета *перед* созданием экземпляра формы:

    class MyAdmin(django.contrib.admin.ModelAdmin):
    
        def formfield_for_dbfield(self, *args, **kwargs):
            formfield = super().formfield_for_dbfield(*args, **kwargs)
            if hasattr(formfield, "widget"):
                formfield.widget.can_add_related = False
                formfield.widget.can_delete_related = False
                formfield.widget.can_change_related = False
            else:
                pass  # this relation doesn't have an admin page to add/delete/change
    
            return formfield
    
    22.11.2019

    4

    Другой подход, если вы определяете встроенную модель и используете ее в своем администраторе, заключается в следующем: перезаписать метод get_formset:

    from django.contrib import admin
    
    
    class MyModelInline(admin.TabularInline):
        model = MyModel
        extra = 0
        min_num = 1
        max_num = 10
        fields = [
            'some_field'
        ]
    
        def get_formset(self, request, obj=None, **kwargs):
            fs = super().get_formset(request, obj, **kwargs)
            fs.form.base_fields['some_field'].widget.can_add_related = False
            fs.form.base_fields['some_field'].widget.can_change_related = False
            fs.form.base_fields['some_field'].widget.can_delete_related = False
            return fs
    
    07.06.2021
    Новые материалы

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..

    Быстрая разработка: волшебный мир больших языковых моделей
    РУКОВОДСТВО Быстрая разработка: волшебный мир больших языковых моделей Подход, основанный на данных, для получения наилучшего ответа Искусство и наука Можно ли совместить машинное..