一個ForeignKey choicefield以一個典型的富吧例如:Django的:使用原始查詢,以限制在的ModelForm
在models.py
:
Class Foo(models.Model):
name = models.CharField(max_length= 200)
Class Bar(models.Model):
name = models.CharField(max_length= 200)
foo = models.ForeignKey('Foo')
在我的形式,我試圖限制的選擇我使用原始查詢將foreignkey
至Foo
劃分爲Foo
的子集。
在forms.py
:
class BarForm(ModelForm):
search_field = CharField(max_length=100, required=False)
def __init__(self,*args,**kwargs):
search_str = kwargs.pop('search_str', None)
super(BarForm,self).__init__(*args,**kwargs)
self.fields['search_field'].initial = search_str
self.fields['foo'].queryset = Bar.objects.raw("""
select f.id as id, f.name as name from bar_lookup(%s)""", [search_str])
class Meta:
model = Bar
exclude = ('foo',)
bar_lookup(%s)
是DB過程返回的表。它搜索多個關係並以優化的方式處理結果的過濾和排序。它的工作原理,我寧願不必在Django代碼中再次編碼。
我收到以下錯誤:"'RawQuerySet' object has no attribute 'all'"
。 如果我使用正常的Bar.objects.filter()
,表單將起作用。
我該如何將我的RawQuerySet
轉換成正常的QuerySet
? 我應該使用self.fields['line_stop'].choice
選項嗎?
哪條線引發異常?當您嘗試迭代列表時是否有例外? – sergzach 2012-08-16 15:01:29
有問題的一行是:self.fields ['foo']。queryset = Bar.objects.raw(「」「 選擇f.id作爲id,f.name作爲bar_lookup(%s)中的名稱」「」,[ search_str]) – 2012-08-16 15:07:44
你能告訴我模板中的行嗎? – sergzach 2012-08-16 15:08:11