此刻,我正在创建一个项目来学习如何使用django。在这个项目中,有三种模型:
我想要实现的是在选择类别之后动态选择相应的子类别,从而能够添加产品。
我尝试使用没有结果的smart_selects,因为它与python 3.7不兼容
我试图使用选定类别字段作为过滤器来过滤子类别列表,但没有成功,我认为我的代码编写得不好,因此需要使用类别字段的值来过滤列表动态子类别。
这是我的代码:
//////////// //models.py
“”“” Z“”“ 从django.db导入模型
class Category(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
class Subcategory(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
类产品(models.Model): “”“ Z”“” category = models.ForeignKey( 类别,verbose_name =“类别”,on_delete =模型。SET_NULL,null =真) 子类别=模型.ForeignKey( 子类别,verbose_name =“子类别”,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导入管理员 从.models导入类别,子类别,产品
class SubcategoryInline(admin.StackedInline): “”“ Z”“” 型号=子类别 额外= 1
@ admin.register(类别) 类CategoryAdmin(admin.ModelAdmin): “”“ Z”“” inlines =(SubcategoryInline,)
@ admin.register(子类别) SubcategoryAdmin(admin.ModelAdmin)类: “”“ Z”“”
@ admin.register(产品) 类ProductAdmin(admin.ModelAdmin): “”“ Z”“” def formfield_for_foreignkey(self,db_field,request,** kwargs): 如果db_field.name ==“子类别”: kwargs [“ queryset”] = Subcategory.objects.filter(subcategory_parent = request.category) 返回super()。formfield_for_foreignkey(db_field,request,** kwargs)
/////////////////////////////////////// //这是我尝试使用它时显示的错误:
在/ admin / prototype / product / add / 处的AttributeError
“ WSGIRequest”对象没有属性“类别”
请求方法:GET 要求网址:http://127.0.0.1:8000/admin/prototype/product/add/ Django版本:2.0.9 异常类型:AttributeError 异常值:
“ WSGIRequest”对象没有属性“类别”
异常位置:formfield_for_foreignkey,第30行中的C:\ asp \ pilgrim \ prototype \ admin.py 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-packages', 'C:\ Program Files \ Python37 \ lib \ site-packages']
服务器时间:2019年1月1日,星期二11:48:18 -0400
答案 0 :(得分:0)
您想将过滤后的查询集传递给您在管理员(或特定视图/模板,如果要在真正的前端中执行此操作)中使用的自定义表单。在此处查看答案:https://stackoverflow.com/a/291968/11295291