這是我第一次真正去使用Django(1.6),我一直沒能想出解決辦法:Django的CreateView的下拉的ModelForm領域的queryset過濾
我試圖在CreateView的限制下拉列表只有一個活躍的狀態(2)表演項目,在項目模型:
class ProjectStatus(models.Model):
name = models.CharField(max_length=8)
class Project(models.Model):
name = models.CharField(max_length=30)
status = models.ForeignKey(ProjectStatus)
class WorkLog(models.Model):
project = models.ForeignKey(Project)
author = models.ForeignKey(User)
log_date = models.DateField(default=datetime.date.today)
accomplishments = models.TextField()
我forms.py:
class WorklogCreateForm(ModelForm):
class Meta:
model = WorkLog
fields = [ 'project', 'log_date', 'accomplishments' ]
def __init__(self, *args, **kwargs):
super(WorklogCreateForm, self).__init__(self, *args, **kwargs)
self.fields['project'].queryset = Project.objects.filter(Project.status == 2)
和views.py我CreateView的:
class WorklogCreate(CreateView):
form_class = WorklogCreateForm
success_url = reverse_lazy('dashboard')
但我得到錯誤:
TypeError at /log/add/
'bool' object has no attribute '__getitem__'
如果我改變我的過濾器是(Project.status.id == 2)
我反而得到:
AttributeError at /log/add/
'ReverseSingleRelatedObjectDescriptor' object has no attribute 'id'
我想我接近,但不我很明顯需要牢固把握。有任何想法嗎?謝謝。
謝謝!這讓我失去了那個錯誤,但現在我的表單似乎並沒有被創建。首先,視圖抱怨沒有template_name被定義,並且在我指定它之後,它會停止渲染,表示表單屬性不存在。我會繼續挖掘,直到我發現這個洞有多深:) – dennyreiter
我將查詢移動到了我的CreateView(我最初想要的)的def get_form()中,現在它似乎工作。非常感謝你的幫助。 – dennyreiter