[英]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.