Python 3.x 如何在django中转义django导入导出返回的多个对象
基于这一点,我得到了充分的回答,这帮助我提高了很多,我在让系统检测特定klass中的流时遇到了一个问题。当我上传时,如果同一所学校的不同班级中有相同的流名称,系统将返回multipleobjectsreern。当我减少[编辑]流,使每个类有一个不同的流名称时,它就起作用了。我如何使其能够接收上传的数据,即它是同一学校的班级,并且4个班级的班级的溪流名称相同,即表格1有溪流鹰和鹰,表格2有溪流鹰、鹰,表格3和4的名称相同???? 我们将非常感谢您的帮助。 以下是模型、资源和视图 资源.pyPython 3.x 如何在django中转义django导入导出返回的多个对象,python-3.x,django,django-views,django-import-export,Python 3.x,Django,Django Views,Django Import Export,基于这一点,我得到了充分的回答,这帮助我提高了很多,我在让系统检测特定klass中的流时遇到了一个问题。当我上传时,如果同一所学校的不同班级中有相同的流名称,系统将返回multipleobjectsreern。当我减少[编辑]流,使每个类有一个不同的流名称时,它就起作用了。我如何使其能够接收上传的数据,即它是同一学校的班级,并且4个班级的班级的溪流名称相同,即表格1有溪流鹰和鹰,表格2有溪流鹰、鹰,表格3和4的名称相同???? 我们将非常感谢您的帮助。 以下是模型、资源和视图 资源.py cla
class KlassForeignKeyWidget(ForeignKeyWidget):
def __init__(self,school_id,model = 'Klass',field="name",*args,**kwargs,):
super().__init__(model=model, field=field, *args, **kwargs)
self.school_id = school_id
def get_queryset(self, value, row, *args, **kwargs):
return Klass.objects.filter(school_id=self.school_id)
class StreamForeignKeyWidget(ForeignKeyWidget):
def __init__(self,school_id,model = 'Stream',field="name",*args,**kwargs,):
super().__init__(model=model, field=field, *args, **kwargs)
self.school_id = school_id
def get_queryset(self, value, row, *args, **kwargs):
return Stream.objects.filter(klass__school_id=self.school_id)
class ImportStudentsResource(resources.ModelResource):
def __init__(self, school_id,*args, **kwargs):
super().__init__()
self.school_id = school_id
self.fields["klass"] = fields.Field(attribute="klass",column_name="class",widget=KlassForeignKeyWidget(school_id,),)
self.fields["stream"] = fields.Field(attribute="stream",column_name="stream",widget=StreamForeignKeyWidget(school_id,),)
def before_save_instance(self, instance, using_transactions, dry_run):
instance.school_id = self.school_id
class Meta:
model = Student
fields = ('student_id','name','year','klass','stream')
景色
class uploadStudents(LoginRequiredMixin,View):
context = {}
def get(self,request):
form = UploadStudentsForm()
self.context['form'] = form
return render(request,'libman/upload_student.html',self.context)
def post(self, request):
school_id = request.user.school.id
form = UploadStudentsForm(request.POST , request.FILES)
data_set = Dataset()
if form.is_valid():
file = request.FILES['file']
extension = file.name.split(".")[-1].lower()
if extension == 'csv':
data = data_set.load(file.read().decode('utf-8'), format=extension)
else:
data = data_set.load(file.read(), format=extension)
resource = ImportStudentsResource(school_id)
result = resource.import_data(data_set, dry_run=True, collect_failed_rows=True, raise_errors=True)
if result.has_validation_errors() or result.has_errors():
messages.success(request,f'Errors experienced during import.')
print("error", result.invalid_rows)
self.context['result'] = result
return redirect('import_students')
else:
result = resource.import_data(data_set, dry_run=False, raise_errors=False)
self.context['result'] = None
messages.success(request,f'Students uploaded successfully.')
else:
self.context['form'] = UploadStudentsForm()
return render(request, 'libman/upload_student.html', self.context)
模型
class School(models.Model):
name = models.CharField(max_length=100,null=True,blank=True,unique=True)
class CustomUser(AbstractUser):
school = models.ForeignKey(School, on_delete=models.CASCADE, null=True, blank=True)
is_librarian = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
class Klass(models.Model):
name = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(4),], help_text='E.g 1,2,3, 4')
school = models.ForeignKey(School,on_delete=models.CASCADE)
class Stream(models.Model):
name = models.CharField(max_length=50,help_text='Name of the stream')
klass = models.ForeignKey(Klass,on_delete=models.CASCADE,help_text='Choose a class the stream belongs to')