Как получить необязательные значения в представлениях django через форму (а не форму django), если пользователь не вводит значение как необязательное? - PullRequest
0 голосов
/ 01 мая 2020

Поскольку мой вариант изображения является необязательным, я хочу сохранить его, даже если файл не загружен, поскольку он является необязательным, но он выдает ошибку, так как не может получить изображение. Как я могу сохранить его в базе данных, даже если это поле пустое? и даже если у нас есть несколько необязательных значений, как получить и сохранить эти записи нулевого типа в базе данных?

#Model
    class Recommendations(models.Model):
        Name = models.CharField(max_length=100)
        Company = models.CharField(max_length=100, null=True)
        Designation = models.CharField(max_length=100, default='Null')
        Message = models.TextField(null=False)
        image = models.ImageField(upload_to='Recommender', default='default.png', blank=True)
        check = models.BooleanField(default=False)


    # Views Code to receive the data through a form

    def recommend(request):
        if request.method == 'POST':
            try:
                name = request.POST['name']
                company = request.POST['company']
                designation = request.POST['designation']
                message = request.POST['message']
                image = request.FILES['photo']
                recom = Recommendations(Name=name,Company=company,Designation=designation, Message=message, image=image)
                recom.save()
                messages.success(request,'Recommendation Recieved')
                return redirect('/')
            except Exception as problem:
                print(problem)
                messages.error(request, problem)
                return redirect('/')

1 Ответ

0 голосов
/ 01 мая 2020

Вместо доступа к данным с помощью request.POST['field'] (или request.FILE['name']) вы должны получить данные, используя метод словаря get(). Таким образом, вы можете определить значения (None по умолчанию) для присваивания вашим переменным, если вы получаете пустые поля, что предотвращает KeyError.

. Я бы реализовал что-то вроде этого:

def recommend(request):
        if request.method == 'POST':
            try:
                data = {
                    'name': request.POST.get('name'),
                    'company': request.POST.get('company'),
                    'designation': request.POST.get('designation'),
                    'message': request.POST.get('message'),
                    'image' = request.FILES.get('photo')
                }
                data = {k: v for k, v in data.items() if v}
                recom = Recommendations(**data)
                recom.save()
                messages.success(request,'Recommendation Recieved')
                return redirect('/')
            except Exception as problem:
                print(problem)
                messages.error(request, problem)
                return redirect('/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...