В данный момент я создаю проект, чтобы научиться использовать 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