2

django-import-export で xls ファイルをインポートしようとしています。

これは私が持っているものです:

class CourseResource(resources.ModelResource):

   course_number = fields.Field(column_name='Kursnummer', attribute='course_number', widget=CharWidget())

   school_year = fields.Field(column_name='Schuljahr', attribute='school_year',
                          widget=ForeignKeyWidget(model=SchoolYear, field='name'))


   #other fields....

   class Meta:
       model = Course
       exclude = ('students')
       export_order = ('id', 'course_number', 'school_year')

SchoolYear モデル:

class SchoolYear(models.Model):
   name = models.CharField(max_length=25, unique=True)
   start_date = models.DateField(verbose_name="Beginn")
   end_date = models.DateField(verbose_name="Ende")

   def __str__(self):
       return self.name

   def __unicode__(self):
       return self.name

コースモデル:

class Course(models.Model):

   course_number = models.CharField(max_length=25, verbose_name="Kursnummer")
   school_year = models.ForeignKey(SchoolYear, default=30, verbose_name="Schuljahr")

   #some other fields...

   students = models.ManyToManyField(Student, verbose_name="Schüler", null=True, blank=True, related_name="courses")

   class Meta:
       unique_together = ('course_number', 'school_year',)
       verbose_name = "Kurs"
       verbose_name_plural = "Kurse"
       managed = True

   def __str__(self):
       return "%s (%s)" % (self.course_number, self.school_year)

私の Excel ファイルの例の行は次のようになります (2 番目の列はコース番号、3 番目の列は学年の名前、さらにいくつかのフィールド):

... 7aMa 2015/2016 ...

django admin でファイルをインポートしようとすると、次のエラー メッセージが表示されます。

Row number: 1 - Column 'school_year': invalid literal for int() with base 10: '2015/2016' [...]
Traceback (most recent call last):
File "/Users/amishelli/Dropbox/IMS/ims2/import_export/resources.py", line 441, in import_row
self.import_obj(instance, row, dry_run)
File "/Users/amishelli/Dropbox/IMS/ims2/import_export/resources.py",    line 300, in import_obj
self.import_field(field, obj, data)
File "/Users/amishelli/Dropbox/IMS/ims2/import_export/resources.py", line 290, in import_field
field.save(obj, data)
File "/Users/amishelli/Dropbox/IMS/ims2/import_export/fields.py", line 112, in save
setattr(obj, attrs[-1], self.clean(data))
File "/Users/amishelli/Dropbox/IMS/ims2/import_export/fields.py", line 68, in clean
 raise ValueError("Column '%s': %s" % (self.column_name, e))
 ValueError: Column 'school_year': invalid literal for int() with base 10: '2015/2016'

SchoolYear の ForeignKey のルックアップが機能しないと思います。私は何を間違っていますか?

4

1 に答える 1

1

私は今答えを見つけました。私の CourseAdmin にはリソース クラスがなかったので、私の CourseResource はまったく効果がありませんでした。私はこれを追加しました:

class CourseAdmin(ImportExportActionModelAdmin, ImportExportModelAdmin):
    list_display = ('course_number', 'school_year', 'school_subject', 'teacher', 'lessons_per_week', 'major')
    list_filter = ('school_year', 'school_subject', 'teacher')
    resource_class = CourseResource

admin.site.register(Course, CourseAdmin)

魔法のように動作します!:)

于 2016-06-23T08:04:59.193 に答える