<p>如果可能的话,我需要一些关于如何使其更通用的指导:</p>
<pre><code>def get_industry_choices(self):
industries = Industry.objects.all().order_by('name')
ind_arr = [(ind.id, ind.name) for ind in industries]
return ind_arr
</code></pre>
<p>基本上,此函数将按<code>forms.ChoiceField</code>的预期返回<code>choices</code>。我需要在一些地方这样做,并希望使上面的函数更通用。我知道如何使<code>industries = Industry.objects.all().order_by('name')</code>成为通用的,但第二部分是我不确定的。当创建元组时,它有<code>(ind.id, ind.name)</code>。<code>ind.name</code>可以是任何值,具体取决于传入的模型(模型中可能不总是有<code>name</code>)。在</p>
<p>我试着在一些地方读到这方面的内容,包括:</p>
<p><a href="https://stackoverflow.com/questions/803616/passing-functions-with-arguments-to-another-function-in-python">Passing functions with arguments to another function in Python?</a></p>
<p>上面的资源展示了如何使用传入的函数来实现它,但是这似乎有点过头了?不管怎样,如果我必须将一个函数作为参数传递,那么用另外一个函数使它更通用又有什么意义呢?在</p>
<p><strong>[编辑]</strong></p>
<p>基本上我想制作类似的东西:</p>
^{pr2}$
<p>因此,当执行<code>forms.ChoiceField</code>时,我可以将<code>TITLE_CHOICES</code>作为可能的选择。第一个值是提交表单时得到的值,第二个值是用户在表单上看到的值。我希望能够用编程的方式创建任何模型,我在上面的例子中传入模型名和一个字段<code>name</code>。我想创建元组,使其成为<code>(id, name)</code>。但是<code>name</code>可以用不同模型中的任何东西来代替。。。在</p>
<p>从你的问题很难判断,但我认为你缺少的是<a href="http://docs.python.org/library/functions.html#getattr" rel="nofollow">getattr()</a>。例如</p>
<pre><code>ind = something()
for field in ['id', 'name']:
print getattr(ind, field)
</code></pre>