【发布时间】:2014-11-24 13:03:10
【问题描述】:
我正在尝试使用 Select 小部件进行 2 层搜索,其中包含下拉菜单,结果将是我的 Meta.model 中的字段列表。第一层是来自 State.model 的州列表。选择后,它应该列出所选州的所有城市,我遇到的问题(我认为这是由于我缺乏知识)是城市列表没有被过滤,而是所有的列表无论州如何,我的数据库中的城市。我不确定在哪里或如何传递我的变量以便能够调用我的 .filter() 语句。
models.py
class Meta(models.Model):
rcabbr = models.CharField(max_length = 15)
slug = models.SlugField(unique=False)
state = models.ForeignKey('State')
rc_state = models.CharField(max_length = 3)
oerp = models.CharField(max_length=18)
subgrp = models.SlugField()
sonus_pic = models.CharField(max_length=8)
ems = models.CharField(max_length=14)
agc = models.CharField(max_length=14)
def __unicode__(self):
return self.rcabbr
class State(models.Model):
name = models.CharField(max_length=2)
slug = models.SlugField(unique=True)
state_long = models.CharField(max_length=15)
owning_site = models.CharField(max_length=12)
def __unicode__(self):
return self.name
return self.state_long
forms.py
class states(forms.Form):
invent = [(k.name,k.state_long) for k in State.objects.all()]
rclist = forms.ChoiceField(widget=forms.Select, choices=invent)
class rateCenter(forms.Form):
invention = [(k.id,k.rcabbr,k.rc_state) for k in Meta.objects.all()]
rcviews = forms.ChoiceField(widget=forms.Select, choices=invention)
views.py
def StateAll(request):
""" This lists out all of the states within the database that
are served"""
rclist = states()
return render(request, 'statelist.html',{'rclist': rclist})
def RcView(request):
""" this should list all the rateCenters within
the state that was selected in StateAll() """
rclist = request.GET['rclist']
forms = rateCenter()
return render(request, 'rclist.html',{'forms': forms})
逻辑告诉我应该在 forms.py 中执行我的 .filter() 语句,但不确定如何在 StateAll() 视图中传递 request.GET 的结果。我确实安装了 debug_toolbar,所以我可以看到变量 u'rclist' 和值 u'LA'(我的测试状态)。我使用超链接实现了 100% 的工作,但是与生产版本中的内容相比,我的测试数据库的大小是微不足道的,而且 HREF 是不可能的。
我的理解是:
ChainedForeignKey(LinkedModel, LinkedModel.field = "field in first Tier", chained_model_field = "current model_field")
这么简单的模型我应该是这样的吗?
def State(model.models):
name = models.CharField(max_length=20) #this is the state abbreviation
state_long = models.CharFeild(max_length=20)#this is state long form
def Meta(model.models):
state = models.CharField(max_length=20)
slug = models.SlugField(unique = False) #same values as rcabbr
rcabbr = ChainedForeignKey(State, chained_field = "state_long",
chained_model_field = "slug")
.....
看起来对吗........所以下拉列表中的第一个字段应该是 State_long,一旦选择下一个应该是 slug?在那个时候,蛞蝓应该被传递给我的网址和最后一页的视图。
我将尝试这个,但是我不能 100% 确定如何查看我的视图,以及我是否需要对表单页面做一些事情,或者这是否涵盖了它?该文档对于新手来说不是用户友好的,因此非常感谢任何输入!
【问题讨论】:
-
试试这个,它很漂亮而且超级简单。自动创建 JavaScript/AJAX 以完全按照您的要求进行操作(请参阅 ChainedForeignKey)
-
[Django-smart-selects](github.com/digi604/django-smart-selects)
-
刚刚安装它,现在阅读如何实现。谢谢。我会回复你的结果。欣赏!!!
-
我已经用过很多次了,如果你遇到麻烦,很高兴明天发布一个如何为你的模型创建字段的例子
-
那太好了,我今晚玩一下,明天发布我的进度!!
标签: django django-forms django-views