Данные не сохраняются в базе данных в Django

#html #django #database #sqlite #django-forms

Вопрос:

Я пытаюсь сохранить данные в базу данных с веб-сайта. Моя веб-страница принимает данные (изображение из моей системы), но в базе данных они не отображаются. Если я добавлю вручную, то это создаст новую запись пользователя и сохранит ее. Вот мои файлы:

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)
 

вам нужно добавить запрос.Файлы:

 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)

 

Но я также экспериментировал с моделью, и это также правильно сохраняет файл

Комментарии:

1. я попробовал это. Но все еще не отображается имя изображения в базе данных

2. Оглядываясь назад (после моего редактирования), я вижу, что вам не хватает upload_to поля изображения, а не только request.FILES инициализации формы

3. Я попытался добавить в ваш код функцию, аналогичную функции store (). Это выдает ошибку : объект ImageForm’ не имеет атрибута ‘store’

4. В соответствии с моим примером, я создал эту функцию сам и не являюсь стандартной функцией формы