'Dehydrate the same field django

I have a model 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()

Also I have a model:

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

my 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)

Now I am executing only name, is that possible to dehydrate the same field student one more time. I need past into my 2 column the surname of the student.



Solution 1:[1]

To export both Student.name and Student.lastname you can directly reference a Foreign Key relation in the fields parameter (docs):

class ClassResource(resources.ModelResource):

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

This means that the column names will appear in your export as:

  • student__name
  • student__lastname

If you want the name to be different, you can directly declare a field:

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

This will then appear in the export under name.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1