数据未保存在 Django 中的数据库中

Posted

技术标签:

【中文标题】数据未保存在 Django 中的数据库中【英文标题】:Data not saving in database in Django 【发布时间】:2021-08-25 05:18:43 【问题描述】:

我正在尝试将数据从网站保存到数据库中。我的网页正在获取数据(来自我的系统的图像),但在数据库中,它没有显示出来。如果我手动添加,那么它会创建一个新的用户条目并存储它。 这是我的文件:

models.py

class Details(models.Model):
name = models.CharField(max_length=122)
username = models.CharField(max_length=122)
email = models.EmailField(max_length=122)
password = models.CharField(max_length=20)
def __str__(self):
    return self.name

class Image_Data(models.Model):
    img_User = models.ForeignKey(
        Details, blank=True, null=True, on_delete=models.CASCADE)
    img_password = models.ImageField(null=True, blank=True)

    def __str__(self):
    return str(self.img_password)

forms.py

class ImageForm(ModelForm):
class Meta:
    model = Image_Data
    fields = ('img_password',)
    labels = 
        'img_password': 'Add your image ',
    
    widgets = 
        'img_password': forms.FileInput(attrs='class': 'form-control', 'placeholder': 'Upload from device')
    

views.py

def register_new_b(request):
saved = False
if request.method == "POST":
    # take whatever is posted to the Details Form
    form = ImageForm(request.POST)
    if form.is_valid():
        form.save()
        messages.success(request, 'Your message has been sent!')
        return HttpResponseRedirect('/register_new_b?saved=True')
else:
    form = ImageForm()
    if 'saved' in request.GET:  # sends saved var in GET request
        saved = True

return render(request, 'register2.html', 'form': form, 'saved': saved)

这是我在保存图像后在数据库中得到的信息

【问题讨论】:

【参考方案1】:

行内:

form = ImageForm(request.POST)

你需要添加 request.FILES:

form = ImageForm(request.POST, request.FILES)

*编辑

我自己的代码中的一个工作示例: 在views.py

def change_profile_pic(request):
    context = dict()
    if request.method == 'POST':
        form = ProfilePictureForm(request.POST, request.FILES)
        if form.is_valid():
            form.store(request.user.id)
            form = ProfilePictureForm()
            context['success_message'] = 'Picture changed'
            request.user.employee.refresh_from_db()
        else:
            context['error_message'] = 'Unable to change picture'
    else:
        form = ProfilePictureForm()
    context['form'] = form

    return render(request, 'template.html', context)

forms.py

class ProfilePictureForm(forms.Form):
    image = forms.ImageField(required=True)

    def store(self, user_id):
        user = User.objects.get(id=user_id)
        user.employee.profile_picture = self.cleaned_data['image']
        user.employee.save()

models.py

class Employee(models.Model):
    user = models.OneToOneField(User, blank=False, on_delete=models.CASCADE)
    profile_picture = models.ImageField(upload_to='profile_pictures', max_length=200, null=True, blank=True)

不过我也试过ModelForm,这样也能正确保存文件

【讨论】:

我试过这个。但仍然没有在数据库中显示图像名称 看起来很奇怪(经过我的编辑),我发现您的 ImageField 中缺少 upload_to,而不仅仅是表单初始化中的 request.FILES 我尝试在您的代码中添加与 store() 类似的函数。它抛出一个错误:ImageForm'对象没有属性'store' 按照我的例子,这个函数是我自己创建的,不是标准的表单函数

以上是关于数据未保存在 Django 中的数据库中的主要内容,如果未能解决你的问题,请参考以下文章

HTML表单数据未保存在数据库中 - django

Django:表单未保存到数据库

Django,模型表格未在数据库中保存数据

如何在 django 中处理未保存的多对多关系?

页面未在 django 中保存表单数据

Django With MSSQL using Pyodbc:未保存模型表单