Есть ли простой способ создать цепочечный динамический выпадающий список на сайте администратора Django? - PullRequest
0 голосов
/ 01 января 2019

В данный момент я создаю проект, чтобы научиться использовать django.В этом проекте есть три модели:

  • Категория
  • Подкатегория
  • Продукт

И я пытаюсь добиться этогодинамически выбирать соответствующую подкатегорию после выбора категории и, таким образом, иметь возможность добавлять продукт.

  • Я пытался использовать smart_selects без результатов, поскольку он несовместим с Python 3.7 * 1015.*

  • Я пытался отфильтровать список подкатегорий, используя выбранное поле категории в качестве фильтра, но безуспешно, я думаю, что я плохо формулирую код, так что он принимает значение поля категориидинамически фильтровать список подкатегорий.

Это мой код:

/////////// //models.py

"" "Z" "" из django.db импорт моделей

Категория класса (models.Model): "" "Z" "" category_name = models.CharField ("Name", max_length = 50)

class Meta:
    ordering = ('pk',)
    verbose_name = "Category"
    verbose_name_plural = "Categories"

def __str__(self):
    """Z"""
    return self.category_name

класс Подкатегория (models.Model):

"""Z"""
subcategory_name = models.CharField("Name", max_length=50)
subcategory_parent = models.ForeignKey(
    Category, verbose_name="Parent", on_delete=models.CASCADE)

class Meta:
    ordering = ('pk',)
    verbose_name = "Subcategory"
    verbose_name_plural = "Subcategories"

def __str__(self):
    return self.subcategory_name

class Продукт (models.Model): "" "Z" "" category = models.ForeignKey (Category, verbose_name = "Category", on_delete = models.SET_NULL, null = True) подкатегория = models.ForeignKey (Подкатегория, verbose_name = "Subcategory", on_delete =models.SET_NULL, null = True) product_name = models.CharField ("Name", max_length = 50, unique = True)

class Meta:
    ordering = ('pk',)
    verbose_name = "Product"
    verbose_name_plural = "Products"

def __str__(self):
    """Z"""
    return self.product_name

/////////// // admin.py

"" "Z" "" из django.contrib импорт admin из .models import Категория, Подкатегория, Продукт

class SubcategoryInline (admin.StackedInline): "" "Z" ""модель = дополнительная подкатегория = 1

@admin.register (Category) class CategoryAdmin (admin.ModelAdmin): "" "Z" "" inlines = (SubcategoryInline,)

@admin.register(Подкатегория) класс SubcategoryAdmin (admin.ModelAdmin): "" "Z" ""

@admin.register (Product) class ProductAdmin (admin.ModelAdmin): "" "Z" "" def formfield_for_foreignkey (self), db_field, request, ** kwargs): if db_field.name == "подкатегория": kwargs ["queryset"] = Subcategory.objects.filter (subcategory_parent = Reque)st.category) return super (). formfield_for_foreignkey (db_field, request, ** kwargs)

#

///////////////////////////////////////////////////////////////// // И это ошибка, которая отображается, когда я пытаюсь ее использовать:

AttributeError at / admin / prototype/ product / add /

Объект 'WSGIRequest' не имеет атрибута 'category'

Метод запроса: GET URL запроса: http://127.0.0.1:8000/admin/prototype/product/add/ Версия Django: 2.0.9 Тип исключения: AttributeErrorЗначение исключения:

Объект 'WSGIRequest' не имеет атрибута 'category'

Расположение исключения: C: \ asp \ pilgrim \ prototype \ admin.py в formfield_for_foreignkey, строка 30 Исполняемый файл Python: C:\ Program Files \ Python37 \ python.exe Версия Python: 3.7.0 Путь к Python:

['C: \ asp \ pilgrim', 'C: \ Program Files \ Python37 \ python37.zip', 'C: \ Program Files \ Python37 \ DLLs ',' C: \ Program Files \ Python37 \ lib ',' C: \ Program Files \ Python37 ',' C: \ Users \ lisandro \ AppData \ Roaming \ Python \ Python37 \ site-пакеты ',' C: \ Program Files \ Python37 \ lib \ site-packages ']

Время на сервере: вт, 1 января 2019 г. 11:48:18 -0400

...