1

我有以下型号:

class Person(models.Model):
    name = models.CharField(max_length=45)
    etc...

class Clothes(models.Model):
    person = models.ForeignKey(Person)
    etc...

我在 admin.py 中有以下内容

class ExportCsvMixin:
    def export_as_csv(self, request, queryset):
        meta = self.model._meta
        field_names = [field.name for field in meta.fields]
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
        writer = csv.writer(response)
        writer.writerow(field_names)
        for obj in queryset:
            row = writer.writerow([getattr(obj, field) for field in field_names])
        return response
    export_as_csv.short_description = "Export Selected as CSV"


class PersonAdmin(admin.ModelAdmin, ExportCsvMixin):
    actions = ["export_as_csv"]
    etc...

这很好用,我可以导出一个包含 Person 中所有字段的 csv 文件。我将如何将 Clothes 模型的最新记录作为 csv 导出的字段包含在内?

4

1 回答 1

0

您必须在您的field_names和行列表中手动添加。

IE

    field_names = [field.name for field in meta.fields]
    field_names.append('recent_cloth')
    ...
    field_names.pop('recent_cloth')
    for obj in queryset:
        cloth = obj.cloth_set.first()
        row_list = [getattr(obj, field) for field in fields_names].append(cloth.name)
        row = writer.writerow([getattr(obj, field) for field in field_names])

select_related或者,如果您使用and创建自己的查询集annotate,则可以将布料字段与对象一起使用。

于 2018-05-11T01:46:12.097 回答