django-import-export ForeignKey小部件返回空值(Django 1.10)

时间:2017-02-17 17:52:32

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

我正在尝试导出Student,它与Django内置的用户模型具有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',)

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

1 个答案:

答案 0 :(得分:0)

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

要使用ForeignKeyWidget,您应指定以下元素:

  • 指定ForeignKeyWidget,这是导入/导出文件中列的名称。
  • column_name中,确定当前模型字段的名称,即attributeOneToOneField。在我的情况下,ForeignKey模型中的user
  • Student中指定相关模型的名称及其要从中获取数据的字段之一。在我的情况下,相关模型为ForeignKeyWidget,字段为User字段。