我试图将数据从Django导出到Excel,但每件事都在我身后,当我导出Excel文件时,Django只导出id:输入图片描述
我试着走在一些教程后面,比如:https://django-import-export.readthedocs.io/en/latest/api_widgets.html和Django调用'期望得到一个数字,但得到一个字符串。
在Django App中,我有:models.py
from pyexpat import model
from statistics import mode
from django.db import models
from django.contrib.auth.models import User
from django.db.models.base import Model
from django.forms import IntegerField
class Post(models.Model):
name = models.CharField(max_length=150)
def __str__(self):
return str(self.name)
class Person(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
def __str__(self):
return f"({self.name} is {self.post} "
class Room(models.Model):
name = models.CharField(max_length= 150 )
def __str__(self):
return str(self.name)
class Classification(models.Model):
name = models.ForeignKey(Person, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
date = models.DateField(auto_created=False)
def __str__(self):
return f"({self.name} Take {self.room} at {self.date})"
admin.py
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import *
from import_export import fields, resources
from import_export.widgets import ForeignKeyWidget
@admin.register(Post, Room, Classification, Person)
class TestappImportExport(ImportExportModelAdmin):
pass
class Classificationresource(resources.ModelResource):
name = fields.Field(
column_name='name',
attribute='name',
widget=ForeignKeyWidget(Person, 'name'))
room = fields.Field(
column_name = 'room',
attribute = 'room',
widget= ForeignKeyWidget(Room, 'name'))
class Meta:
fields = ('name', 'room')
即使我试图将Classificationresource(resources.ModelResource)类的Classificationresource(resources.ModelResource)反转为Classificationresource(resources.ModelResource),我仍然得到id而不是Persons或Rooms的名称。
所以请帮我解决这个问题,我累了一直搜索,我觉得我花了时间。
来自文档:
在定义ModelResource字段时,可以遵循模型关系:
class BookResource(resources.ModelResource):
class Meta:
model = Book
fields = ('author__name',)
那么我试试这个:
class Classificationresource(resources.ModelResource):
class Meta:
model = Classification
fields = ('id', 'name__name', 'room__name', 'date')
编辑:还有必要添加
@admin.register(Classification)
class TestappImportExport(ImportExportModelAdmin):
resource_class = Classificationresource