【问题标题】:django-import-export ForeignKey widget returns empty values (Django 1.10)django-import-export ForeignKey 小部件返回空值(Django 1.10)
【发布时间】:2017-07-07 08:44:02
【问题描述】:

我正在尝试导出 Student,它与 Django 内置 User 模型具有 OneToOne 关系。但是当我导出学生时,导出文件中的用户名列是空的。

# models.py    
class Student(models.Model):
        user = models.OneToOneField(User, verbose_name=_('user'))
        student_number = models.CharField(unique=True, null=False, max_length=10, verbose_name=_('student number'))
        score = models.PositiveIntegerField(default=0, verbose_name=_('score'))

        def __str__(self):
            return self.user.get_full_name()

# admin.py
class StudentResource(resources.ModelResource):
    username = fields.Field(column_name='username', attribute='User',
               widget=widgets.ForeignKeyWidget(model=User, field='username'))

    class Meta:
        model = Student
        fields = ('id', 'username', 'student_number', 'score',)

class StudentAdmin(ImportExportActionModelAdmin):
    resource_class = StudentResource

admin.site.register(Student, StudentAdmin)

用这个替换 StudentResource 类时得到结果:

class StudentResource(resources.ModelResource):

    class Meta:
        model = Student
        fields = ('id', 'user__username', 'student_number', 'score',)

但是在导入数据时我会遇到问题。有什么想法吗?

【问题讨论】:

    标签: python-3.x django-1.10 django-import-export


    【解决方案1】:

    嗯,这是关于attribute='User'username 字段中的大写“用户”。我认为解释更多有关使用 ForeignKeyWidget 的信息可能会很好。

    要使用ForeignKeyWidget,您应该指定这些元素:

    • 指定一个column_name,它是您的导入/导出文件中列的名称。
    • attribute 中,确定当前模型 的字段名称,即OneToOneFieldForeignKey。在我的例子中,userStudent 模型中。
    • ForeignKeyWidget 中指定相关模型的名称及其要从中获取数据的字段之一。在我的例子中,相关模型是User,字段是它的username 字段。

    【讨论】:

    • 非常感谢您的回答。你的解释比官方的 django-import-export 文档要好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多