Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理页面-导出字段+;可调用字段_Django_Django 1.11_Django Import Export - Fatal编程技术网

Django管理页面-导出字段+;可调用字段

Django管理页面-导出字段+;可调用字段,django,django-1.11,django-import-export,Django,Django 1.11,Django Import Export,Django版本:1.11 Python:2.7 包装:django进出口 我正在尝试导出Django管理页面的“可调用”字段。(参考资料:) 在他们的示例中,他们的PersonalAdminlist\u display有一个“callable” def upper_case_name(obj): return ("%s %s" % (obj.first_name, obj.last_name)).upper() upper_case_name.short_description = '

Django版本:1.11 Python:2.7 包装:
django进出口

我正在尝试导出Django管理页面的“可调用”字段。(参考资料:)

在他们的示例中,他们的PersonalAdmin
list\u display
有一个“callable”

def upper_case_name(obj):
    return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'

class PersonAdmin(ExportMixin, admin.ModelAdmin):
        list_display = (upper_case_name,)
对于资源,我想我还可以导出callable字段

class PersonResource(resources.ModelResource):

    class Meta:
    model = Person
    fields = ( "first_name",
               "last_name",
               "upper_case_name", )
但是,我将获得Person没有名为
大写字母\u name
的字段。 是否有导出可调用字段的方法

从文档中看,您确实可以导出不存在的字段

他们的例子是:

from import_export.fields import Field

class BookResource(resources.ModelResource):
    full_title = Field()

    class Meta:
        model = Book

    def dehydrate_full_title(self, book):
        return '%s by %s' % (book.name, book.author.name)
我复制了这一点,并尝试:

class PersonResource(resources.ModelResource):
    upper_case_name = Field()

    class Meta:
        model = Person

    def dehydrate_upper_case_name(self, obj):
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()
我试图做同样的事情,但我会得到一个错误:Person没有名为
大写字母\u name
的字段。 有什么想法吗


提前谢谢

看起来有两种方法可以做到这一点:

方法1

发件人:

  • 属性–实例属性或对象可调用的字符串。
在模型中添加一个可调用函数

    class Person(models.Model):

        def get_upper_case_name(self):
            return ("%s %s" % (obj.first_name, obj.last_name)).upper()
        upper_case_name = property(get_upper_case_name)
现在在PersonResource文件中,声明新的自定义字段

class PersonResource(resources.ModelResource):
    upper_case_name = Field(attribute="get_upper_case_name", column_name="Upper Case Name")

    class Meta:
    model = Person
    fields = ( "first_name",
               "last_name",
               )
方法2

这一切都可以在资源中完成:

class PersonResource(resources.ModelResource):
    upper_case_name = fields.Field(column_name="Upper Case Name")

    def dehydrate_upper_case_name(self, obj):
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()

    class Meta:
        model = Person
        fields = ( "first_name",
                   "last_name",
                   "upper_case_name"
                   )
干杯