python - 如何从 django 的纯 html 中的选择选项值返回 int
问题描述
我有一个包含选择选项的纯 html 表单,选择选项值应返回一个 int 以存储在数据库中。
我尝试在视图中将值转换为 int ,但它仍然不起作用。
这是 ScrummyGoals 模型
class ScrummyGoals(models.Model):
user_name = models.ForeignKey(ScrummyUser, on_delete=models.CASCADE)
#goal_status = models.ForeignKey(GoalStatus, on_delete=models.CASCADE)
task = models.CharField(max_length=200)
#task_target = models.CharField(max_length=30)
target_name = models.ForeignKey(GoalStatus, on_delete=models.CASCADE, default=1, related_name="scrummygoals")
def __str__(self):
return self.task
这是我从中填充选择选项的模型。
class GoalStatus(models.Model):
target = models.CharField(max_length=100, choices=target, default="Week")
def __str__(self):
return self.target
这是html表单
<form action="" method="post">
{% csrf_token %}
<div class="form-group">
<label for="task">Task</label>
<input type="text" class="form-control" id="task" name="task">
</div>
<div class="form-group">
<label for="task">Goal</label>
<select name="goal" class="form-control">
{% for goal in goal %}
<option value='{{goal.id | to_int }}'>{{goal.target}}</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-primary">Create task</button>
</form>
这是我收到发布请求并保存到数据库的视图。
def user_add_task(request):
goal = GoalStatus.objects.all()
if request.method == 'POST':
if request.POST.get('task') and request.POST.get('goal'):
task = ScrummyGoals()
task.target_name = int(request.POST.get('goal'))
task.user_name = request.user.scrummyuser.id
task.task = request.POST.get('task')
task.save()
return redirect('myapp:home')
return render(request, 'myapp/user_add_task.html', {'goal':goal})
我希望选择选项的值是整数,例如 1,而不是字符串,例如“1”。所以我得到这个错误: 异常类型:ValueError 异常值:
无法分配“1”:“ScrummyGoals.target_name”必须是“GoalStatus”实例。
解决方案
尝试改变
task.target_name = int(request.POST.get('goal'))
task.user_name = request.user.scrummyuser.id
到
task.target_name_id = int(request.POST.get('goal'))
task.user_name_id = request.user.scrummyuser.id
或者
task.target_name = GoalStatus.objects.get(pk=request.POST.get('goal'), )
task.user_name = request.user.scrummyuser
我建议重命名两个 FK 字段:删除_name
后缀。这些不是“名称”——它们是指向其他模型实例的链接。所以第一个指向target
viatarget_id
值,第二个指向user
viauser_id
值并且应该相应地命名。
推荐阅读
- python - 4 个类,1 个执行操作并请求输入,其他类跟踪值
- javascript - chrome.devtools.network.onRequestFinished 中的 chrome.runtime.sendMessage
- java - 这个 java while 循环在合并排序中做了什么?
- unreal-engine4 - 我在哪里可以阅读有关程序生成关卡的更多信息?
- scala - 在火花 UDF 中获取空指针异常
- android - 定义 NavigationDrawer 行为
- c++ - 在 Qt 中执行图像显示的最佳方法
- python - 在 Pyspark 中按顺序应用多个正则表达式进行文本清理的最快方法
- ruby-on-rails-5 - users_signup_test.rb 在断言 users.reload.activated 时失败。期望假为真。Railstutorial Hartl
- json - AJAX Json 对象在 ASPNET Core 中始终为空