我遇到显示相关表格值的问题。它会告诉我table object
。当我尝试检索它时,我得到了表值本身,但是我无法获得外表值。
form.py
class MyForm(forms.ModelForm):
name = forms.CharField(label='Whatever Name')
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super(MyForm, self).__init__(*args, **kwargs)
qs = ForeignTable.objects.filter(user=user, status="Y") | ForeignTable.objects.filter(rel_user=user, status="Y")
self.fields['dropdown'].queryset = qs #the user id can be one column or a rel_user column
此输出是一个下拉菜单,但它显示ForeignTable object
。然后使用外键将此ForeignTable
连接到UserTable
。这是我被困的地方。我无法显示列表。所以我尝试了qs=[(o.id, str(o.user.username)) for o in qs]
。在打印时,我可以看到我的用户名。但是在打印list object has no attribute all
后它会出错。所以我查看了模板。
template.html
{{ form.as_ul}}
这就是我所拥有的,然后我改变以查看下拉列表中的内容我正在寻找{{form.dropdown }}
。它给了我同样的错误。所以现在我不知道接下来要去哪里看。它所说的all
在哪里?
答案 0 :(得分:0)
最简单的方法是在模型上定义__unicode__
方法,以更可读的方式表示模型对象,而不是当前显示的ForeignTable object
,执行以下操作:
class ForeignTable(models.Model):
# ...
def __unicode__(self):
user = self.user or self.rel_user
return user.username
另一种方法是定义自定义ModelChoiceField
,您可以在其中更改查询集对象的显示内容:
class CustomModelChoiceField(forms.ModelChoiceField):
def label_from_instance(self, obj):
user = obj.user or obj.rel_user
return user.username
class MyForm(forms.ModelForm):
dropdown = CustomModelChoiceField(queryset=ForeignTable.objects.none())
# other fields