Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在django中转义django导入导出返回的多个对象_Python 3.x_Django_Django Views_Django Import Export - Fatal编程技术网

Python 3.x 如何在django中转义django导入导出返回的多个对象

Python 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

基于这一点,我得到了充分的回答,这帮助我提高了很多,我在让系统检测特定klass中的流时遇到了一个问题。当我上传时,如果同一所学校的不同班级中有相同的流名称,系统将返回multipleobjectsreern。当我减少[编辑]流,使每个类有一个不同的流名称时,它就起作用了。我如何使其能够接收上传的数据,即它是同一学校的班级,并且4个班级的班级的溪流名称相同,即表格1有溪流鹰和鹰,表格2有溪流鹰、鹰,表格3和4的名称相同???? 我们将非常感谢您的帮助。 以下是模型、资源和视图

资源.py

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')