【问题标题】:Django: How can I changes values via views.pyDjango:如何通过views.py更改值
【发布时间】:2021-09-18 23:25:16
【问题描述】:

我正在尝试制作一个“上传”页面,以便我可以使用 pd.to_sql() 将文件和进程上传到 postgres DB。所有数据已成功记录到数据库中,但无法更改“is_recorded”和“has_issue”的值。这是我目前正在处理的文件。

在上传/models.py中

from django.db import models

class Upload(models.Model):
    file_name = models.FileField(upload_to='uploads', max_length=255)
    uploaded = models.DateTimeField(auto_now_add=True)
    # When uploaded successfully
    is_recorded = models.BooleanField(default=False)
    # When it has a problem to fix
    has_issue = models.BooleanField(default=False)

    def __str__(self):
        return f'{self.file_name}: {self.id}'

在views.py中

import os

from django.shortcuts import render

from core.db_implements import upload_csv_to_DB

from upload.forms import UploadForm
from upload.models import Upload


def upload_view(request):

    error_message = None
    success_message = None

    form = UploadForm(request.POST or None, request.FILES or None)

    if form.is_valid():
        form.save()
        form = UploadForm()

        try:

            obj = Upload.objects.get(is_recorded=False)

            recorded, issue, success_message, error_message = ***upload_csv_to_DB***(obj)

            obj.is_recorded = recorded
            obj.has_issue = issue
            obj.save()
            success_message = success_message
            error_message = error_message

        except:

            error_message = 'Something went wrong.'


    context={
        'form': form,
        'success_message': success_message,
        'error_message': error_message,
    }

    return render(request, 'upload/upload.html', context)

在forms.py中

from django import forms
from django.db.models import fields
from django.forms.fields import FileField
from django.forms.models import ModelFormMetaclass
from .models import Upload

class UploadForm(forms.ModelForm):

    # file_name = forms.FileField(max_length=255, label=False)

    class Meta:

        model=Upload
        fields = ('file_name',)

        widgets = {
            'file_name': forms.FileInput(
                attrs={
                    'class': 'form-control',
                }
            )
        }

我将获取文件对象并转换为数据帧并记录到数据库中的函数 (upload_csv_to_DB) 外包。如果成功,recorded=True 应该返回 sucess_message,但是,如果出现问题,issue=True 应该返回 error_message。无论如何,记录和问题总是错误的,并且有来自除子句“出错了。”的 error_message。请给我建议...

【问题讨论】:

    标签: django view


    【解决方案1】:

    我找到了原因。我没有初始化外包函数的返回值upload_csv_to_DB。将返回的值初始化为之后,一切都按预期工作。这是解决问题的代码。

    upload_csv_to_DB.py:

    def upload_csv_to_DB(csv_obj):
    
        recorded = False
        issue = False
        success_message = None
        error_message = None
    
        upload_file = csv_obj.file_name.path    
    
        ...
    
        return (recorded, issue, success_message, error_message)
    

    views.py:

    def upload_view(request):
    
        error_message = None
        success_message = None
        recorded =False
        issue = False
    
        if request.method == 'POST':
    
            form = UploadForm(request.POST, request.FILES)
    
            if form.is_valid():
                form.save()
    
                try:
    
                    obj = Upload.objects.get(is_recorded=False)
    
                    recorded, issue, success_message, error_message = upload_csv_to_DB(obj)
    
                    obj.is_recorded = recorded
                    obj.has_issue = issue
                    obj.save()
                    success_message = success_message
                    error_message = error_message
    
                except:
    
                    error_message = 'Something went wrong.'
    
        else:
    
            form = UploadForm()
    
    
        context={
            'form': form,
            'success_message': success_message,
            'error_message': error_message,
        }
    
        return render(request, 'upload/upload.html', context)
    

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 2012-06-06
      • 2021-09-28
      • 1970-01-01
      • 2017-03-27
      相关资源
      最近更新 更多