2017-02-17 12 views
1

Я пытаюсь экспортировать Student, у которого есть отношения OneToOne с встроенным Django Пользователь. Но когда я экспортирую студентов, столбец имени пользователя пуст в экспортированном файле.django-import-export Виджет ForeignKey возвращает пустые значения (Django 1.10)

# 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',) 

, но тогда я бы проблемы при импорте данных. Есть идеи?

ответ

0

Ну, это о заглавном «Пользователь» в attribute='User' в username. Я подумал, что было бы полезно объяснить больше об использовании ForeignKeyWidget.

Для использования ForeignKeyWidget следует указать эти элементы:

  • Укажите column_name, который является именем столбца в импорте/экспорте файл.
  • В attribute определите название поля вашей текущей модели, которая является OneToOneField или ForeignKey. В моем случае это user в Student модель.
  • В ForeignKeyWidget укажите имя родственной модели и одно из полей, из которого вы хотите получить данные. В моем случае родственная модель User, поле является его username.