MrO*_*Sir 0 django django-models export-to-csv django-rest-framework
我有以下型号:
class Student(models.Model):
first_name = models.CharField(verbose_name='student first name', max_length=64)
last_name = models.CharField(verbose_name='student last name', max_length=64)
email = models.EmailField()
class Meta:
db_table = 'student'
def __str__(self):
return self.first_name + ' ' + self.last_name
class Course(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
start_date = models.DateField(null=True, blank=True, default=None)
end_date = models.DateField(null=True, blank=True, default=None)
class Meta:
db_table = 'course'
def __str__(self):
return self.name
class CourseParticipant(models.Model):
course = models.ForeignKey(Course, related_name='courses', on_delete=models.CASCADE)
student = models.ForeignKey(Student, related_name='student_name', on_delete=models.CASCADE)
completed = models.BooleanField(null=False, default=False)
class Meta:
db_table = 'course_participant'
def __str__(self):
return self.course, self.student
Run Code Online (Sandbox Code Playgroud)
还有我们:
urlpatterns = [
path('course', CourseAPIView.as_view()),
path('course/<int:pk>/', CourseAPIDetailView.as_view()),
path('student', StudentAPIView.as_view()),
path('student/<int:pk>/', StudentAPIDetailView.as_view()),
path('student/assigned_to_course', StudentAssignedToTheCourseAPIView.as_view()),
path('student/assign_student_to_course', StudentAssignToCourse.as_view()),
path('student/assigned_to_course/<int:pk>/', StudentAssignedToTheCourseDetailView.as_view()),
path('student/report/<int:pk>/', StudentReportView.as_view()),
Run Code Online (Sandbox Code Playgroud)
]
我需要以 csv 格式导出一些数据,格式如下:
例如:
Test Student,10, 3
Test Student1,12, 1
Test Student2,5, 3
Test Student3,5, 4
Run Code Online (Sandbox Code Playgroud)
那么,应该采取什么观点呢?我的意思是,我如何获取学生全名等数据。我将不胜感激
您可以使用Python的csv模块。
首先,我建议full_name在模型中定义为属性,Student因为它会让它更清晰:
class Student(models.Model):
...
@property
def full_name(self):
return self.first_name + ' ' + self.last_name
Run Code Online (Sandbox Code Playgroud)
APIView然后您可以为该作业定义一个简单的:
import csv
from django.http import HttpResponse
from rest_framework.views import APIView
class ExportCSVStudents(APIView):
def get(self, request, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="export.csv"'
writer = csv.writer(response)
for student in Student.objects.all():
assigned_courses = CourseParticipant.objects.filter(student=student)
completed_courses = assigned_courses.filter(completed=True)
row = ','.join([
student.full_name,
assigned_courses.count(),
completed_courses.count()
])
writer.writerow(row)
return response
Run Code Online (Sandbox Code Playgroud)
export.csv在您在 urlconf 中注册并通过简单的 HTTP GET 访问它后,这应该会自动下载一个包含您所需数据的文件。
| 归档时间: |
|
| 查看次数: |
6260 次 |
| 最近记录: |