Как включить самую последнюю запись из обратного FK при экспорте из администратора django в файлы csv?
У меня есть следующие модели:
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...
Это прекрасно работает, и я могу экспортировать CSV-файл со всеми полями из Person. Как мне добавить последнюю запись модели одежды в качестве поля для экспорта в csv?
1 ответ
Вы должны добавить вручную в своем field_names
и список строк.
т.е.
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
а также annotate
Вы можете использовать ткань поля с объектом.