脱水同场django

Dehydrate the same field django

我有一个模型Student:

class Student(models.Model):
    id                  = models.AutoField(primary_key=True)
    name                = models.CharField(max_length=30, verbose_name='Name')
    lastname            = models.CharField(max_length=100, verbose_name='Lastname')
    history             = HistoricalRecords()

我还有一个模型:

class Class(models.Model):
        id                  = models.AutoField(primary_key=True)
        student             = models.models.ForeignKey(Student,on_delete = models.CASCADE, related_name='+')

我的admin.py

class ClassResource(resources.ModelResource):

    class Meta:
        model = Class
        fields = ('student',)

    def dehydrate_student(self, Class):
        student= getattr(Class.student, "name")
        return '%s' % (student)


class ClassExportAdmin(ImportExportModelAdmin, ClassAdmin):
    resource_class = ClassResource

admin.site.register(Class, ClassExportAdmin)

我现在只执行name,是否可以让同一专业的学生再脱水一次。我需要在我的第 2 列中输入学生的姓氏。

要同时导出 Student.nameStudent.lastname,您可以在 fields 参数中直接引用外键关系 (docs):

class ClassResource(resources.ModelResource):

    class Meta:
        model = Class
        fields = ('student__name', 'student__lastname')

这意味着列名称将在您的导出中显示为:

  • student__name
  • student__lastname

如果想要名字不一样,可以直接声明一个字段:

    name = Field(
        column_name='name',
        attribute='name',
        widget=ForeignKeyWidget(Student, 'name'))

这将出现在 name 下的导出中。