数据未保存在 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 中的数据库中的主要内容,如果未能解决你的问题,请参考以下文章