我想要做的是使用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?那时slug应该传递到我的网址和最后一页的视图。
我会尝试这个但是我不是100%确定如何查看我的观点,如果我需要对表单页面做一些事情或者这是否涵盖了它?对于刚接触到此内容的人来说,该文档不是用户友好的,因此任何输入都将非常受欢迎!
答案 0 :(得分:0)
有许多第三方图书馆django-smart-selects和dajax浮现在脑海中 - 这将为您自动执行此操作,并为您提供必要的JavaScript以便动态过滤表单字段。
如果您正在调查这些,那么您只需使用django表格即可:
class RateCenterForm(forms.Form):
rate_center = forms.ModelChoiceField(queryset=Meta.objects.all())
def __init__(self, *args, **kwargs):
state = kwargs.pop('state')
super(RaterCenterForm, self).__init__(*args, **kwargs)
self.fields['rate_center'].queryset = Meta.objects.filter(state=state)
ModelChoiceField
是从模型中获取其值的选择下拉列表。
现在在您看来,您可以这样称呼它:
def show_rate_centers(request):
form = RateCenterForm(state='SomeState')
# .. your normal logic here