Django: Импорт данных из загруженного файла excel

Я пытаюсь создать приложение для импорта данных из загруженного .csv файла в мою базу данных. Вот к чему мне удалось прийти самостоятельно: файл загружается без проблем, и я могу передать информацию из файла в переменную first_row и second row. Теперь моя проблема заключается в том, как я могу сохранить информацию в базе данных. Мой код представления:

ПРОСМОТРОВ

@login_required
def file_upload(request):
    data = None

    if request.method == 'POST':
        file_form = FileForm(request.POST, request.FILES)
        data_form = DatasetForm(request.POST, request.FILES)
        raw_file= request.FILES
        if file_form.is_valid() or data_form.is_valid():       
            data = request.FILES['file_upload']             
            data = pd.read_csv(data, header=0, encoding="UTF-8")                   
            first_row = data.iloc[[0]]
            second_row = data.iloc[[1]] 
                            
            file_form.instance.user = request.user.profile    
            file_form.instance.filename = raw_file['file_upload'].name            
            file_form.save() 
            return redirect('upload_file')
        else:
            return redirect('home')
    else:
        form = FileForm()  
 
    context = {              
               'data': data,
               'second_row': second_row,
               'file_form': file_form,                             
               'message': message,         
               }
    return render(request, 'upload_file.html', context)

Вот как выглядят мои данные и модели: ДАННЫЕ

        code  tot sd     
name_1  aa    3    1
name_2  bb    7    2

МОДЕЛЬ

class File(models.Model): 
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)   
    filename = models.CharField(max_length=250)   
    file_upload = models.FileField(upload_to=path)
    upload_date  = models.DateField(default=datetime.now)   

    def __str__(self):        
        return self.user.name + 'file'

class Dataset(models.Model):    
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)
    file_uploaded = models.OneToOneField(File, on_delete=models.CASCADE)

    name_user_A = models.CharField(max_length=250)
    code_user_A = models.PositiveIntegerField(null=True)
    total_user_A = models.PositiveIntegerField(null=True)
    sd_user_A = models.PositiveIntegerField(null=True)

    name_user_B = models.CharField(max_length=250)
    code_user_B = models.PositiveIntegerField(null=True)
    total_user_B = models.PositiveIntegerField(null=True)
    sd_user_B = models.PositiveIntegerField(null=True)

ФОРМЫ

class FileForm(forms.ModelForm):
    class Meta:
        model = File
        fields = '__all__'


class DatasetForm(forms.ModelForm):
    class Meta:
        model = Dataset
        fields = '__all__'

В основном мне нужно сохранить первую строку в поле для пользователя_A и вторую строку для пользователя_B. Только модель File составляется пользователем, а Dataset должен заполняться автоматически из информации в файле. Как я могу это сделать? Спасибо всем! PS (Мне пришлось внести некоторые изменения, чтобы сделать его короче и понятнее, может быть несколько опечаток, но он действительно работает)

Если вы импортируете модель Dataset, вы можете создать новый объект на основе данных, которые вы уже получили из файла.

например:

#import your model
from . models import Dataset


@login_required
def file_upload(request):
    data = None

    if request.method == 'POST':
        file_form = FileForm(request.POST, request.FILES)
        data_form = DatasetForm(request.POST, request.FILES)
        raw_file= request.FILES
        if file_form.is_valid() or data_form.is_valid():       
            data = request.FILES['file_upload']             
            data = pd.read_csv(data, header=0, encoding="UTF-8")                   
            first_row = data.iloc[[0]]
            second_row = data.iloc[[1]] 

            # create new dataset object
            Dataset.objects.create(
                name_user_A=first_row,
                name_user_B=second_row,
                ...,
                ...)
Вернуться на верх