如果用户不输入值,如何通过表单(不是 django 表单)在 django 视图中接收可选值,因为它是可选的?



由于我的图像选项是可选的,即使文件没有上传,我也想保存它,因为它是可选的。但它给我带来了错误,因为它无法接收图像。即使该字段为空,我如何将其保存在数据库中?即使在我们有多个可选值的情况下,如何在数据库中接收和保存这些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('/')

您应该使用字典的get()方法来获取数据,而不是通过request.POST['field'](或request.FILE['name'](来访问数据。这样,如果收到空字段,就可以定义要分配给变量的值(默认为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('/')

最新更新