簡體   English   中英

如果用戶沒有輸入可選值,如何通過表單(不是 django 表單)在 django 視圖中接收可選值?

[英]How to receive optional values in django views through a form(not a django form), if user doesn't enter the value as it is optional?

由於我的圖像選項是可選的,即使文件沒有上傳,我也想保存它,因為它是可選的,但它給了我錯誤,因為它無法接收圖像。 即使該字段為空,如何將其保存在數據庫中? 即使我們有多個可選值,如何在數據庫中接收和保存那些 null 類型的條目?

#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('/')

而不是通過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('/')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM