【问题标题】:Data not saving in database in Django数据未保存在 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})

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

【问题讨论】:

    标签: html django database sqlite django-forms


    【解决方案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'
    • 按照我的例子,这个函数是我自己创建的,不是标准的表单函数
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2021-06-08
    • 2018-10-10
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多