django-import-export ForeignKey 小部件 returns 空值 (Django 1.10)
django-import-export ForeignKey widget returns empty values (Django 1.10)
我正在尝试导出 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 时得到结果:
class StudentResource(resources.ModelResource):
class Meta:
model = Student
fields = ('id', 'user__username', 'student_number', 'score',)
但是我在导入数据时会遇到问题。有什么想法吗?
嗯,是关于 username
字段中 attribute='User'
中大写的 'User'。我认为解释更多关于使用 ForeignKeyWidget
.
可能会更好
要使用 ForeignKeyWidget
,您应该指定这些元素:
- 指定
column_name
,这是您的 import/export 文件中的列名。
- 在
attribute
中,确定您的 当前模型 的字段名称,即 OneToOneField
或 ForeignKey
。就我而言,它是 Student
模型中的 user
。
- 在
ForeignKeyWidget
中指定相关模型的名称及其要从中获取数据的字段之一。在我的例子中,相关模型是 User
,字段是它的 username
字段。
我正在尝试导出 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 时得到结果:
class StudentResource(resources.ModelResource):
class Meta:
model = Student
fields = ('id', 'user__username', 'student_number', 'score',)
但是我在导入数据时会遇到问题。有什么想法吗?
嗯,是关于 username
字段中 attribute='User'
中大写的 'User'。我认为解释更多关于使用 ForeignKeyWidget
.
要使用 ForeignKeyWidget
,您应该指定这些元素:
- 指定
column_name
,这是您的 import/export 文件中的列名。 - 在
attribute
中,确定您的 当前模型 的字段名称,即OneToOneField
或ForeignKey
。就我而言,它是Student
模型中的user
。 - 在
ForeignKeyWidget
中指定相关模型的名称及其要从中获取数据的字段之一。在我的例子中,相关模型是User
,字段是它的username
字段。