python - 如果用户没有输入可选值,如何通过表单(不是 django 表单)接收 django 视图中的可选值?
问题描述
由于我的图像选项是可选的,即使文件没有上传,我也想保存它,因为它是可选的,但它给了我错误,因为它无法接收图像。即使该字段为空,如何将其保存在数据库中?即使我们有多个可选值,如何在数据库中接收和保存这些空类型条目?
#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('/')
推荐阅读
- javascript - 如何在sheetjs javascript中为工作簿设置密码
- pytorch - 为令牌分类创建自定义数据集 [layoutlm]
- android - Kotlin:类型不匹配:推断类型为 String 但预期为 Context -(kotlin 类特定错误中的通知通道)
- laravel - 在 laravel livewire 中,我只想在用户的值从特定值更改为另一个特定值时获取用户
- java - 如何打印包含 unicode 的单词?
- jquery - 如果另一个 div 的 display 属性从 none 更改为 block,如何将一个 div 的 display 属性更改为 none?
- sql - 从 oracle 中的嵌套目录创建外部表
- nested - 嵌套模型不收敛
- deep-learning - 使用 LSTM 预测未来 6 个月的销售情况
- environment-variables - 在运行本地开发服务器时,在 UI 中设置的 Netlify 环境变量被注入为未定义