擅长:python、mysql、java
<p>我是如何解决这个问题的:</p>
<p>来自@NeoWang的最后一段代码确实可以工作(在对返回相同形式的字典列表稍作修改之后)模型.对象.值(是的),但是在我的特定情况下它没有任何用处,因为djqscv模块需要一个queryset。相反,我所做的是将代码的第一位用于ForeignKey字段,对于选项,在编写CSV之前,我只需将choice字段的整数值替换为choices元组中的相应名称。硬编码部分只针对三个字段,所以我将添加一个适当的注释,我想就这么做了。在</p>
<p>所以这看起来是这样的:</p>
<p>自定义管理器模型.py在</p>
<pre><code>class ContactManager(models.Manager):
def get_values(self):
fields_foreign = [(
field.name,
isinstance(field, models.ForeignKey)
) for field in Contact._meta.fields]
value_fields = [
f[0] if not f[1] else "{}__name".format(f[0])
for f in fields_foreign
]
return Contact.objects.values(*value_fields)
</code></pre>
<p>修改djqscv.py(遗憾的是,我们必须合并修改,因此我们必须在项目中使用我们的修改版本):</p>
<p>在djqscv.py在</p>
^{pr2}$
<p>replace_choice()方法是针对我的模型进行硬编码的,不过您应该明白这一点。在上面和@NeoWang answer中提供的代码块上构建动态解决方案相当容易。在</p>