gpt4 book ai didi

python - Django - 以一种形式保存多个选择框

转载 作者:行者123 更新时间:2023-12-01 02:08:09 25 4
gpt4 key购买 nike

我需要以一种形式保存多个选择,但它不会将值保存到我的模型中。表单如下所示:

enter image description here

这是我的 models.py

class ChoiceManager(models.Manager):
def rates (self, Task_id, rating2, yo):
assignment = Assignment.objects.get(id=Assignment_id)
rating = rating2
yo = FiscalYear.objects.get(fy_year=years)
for i in range(len(rating2)):
rated = Prog_capability.objects.create(
task = task,
rating2 = rating[i],
fy = yo[i]
)

class NewYear(models.Model):
year = models.CharField(max_length=5)
new_year = models.CharField(max_length=5)

class Choice(models.Model):
rating = models.CharField(max_length=255, blank=True, null=True)
year = models.ForeignKey(NewYear, related_name="choices")
assignment = models.ForeignKey(Assignment, related_name="choice")
objects = ChoiceManager()

这是我的观点.py

def task_rating(request, Assignment_id):
ratings = request.POST.getlist('rating2',[])
years= request.POST.getlist('yo",[])
rates= Choice.objects.rates(Assignment_id, ratings, years)
return redirect ((reverse('Project:assignment_page', kwargs={'Assignment_id': Assignment_id})))

HTML

 <form action="{% url 'project:rating' %}" method="post">
{% csrf_token %}
{% for year in years %}
<li class=cap_select>
<div id=fyc>{{year.fy_year}}</div>
<select name="rating2" id="{{assignment.id}}-{{year.id}}">
<option>Choose From List</option>
<option class=hi value="high">High</option>
<option class=med value="medium">Medium</option>
<option class=low value="low">Low</option>
<option class=na value="n/a">N/A</option>
</select>
<input type="hidden" name="yo" value={{year.fy_year}}>
</li>
{% endfor %}
<br>
<input id=save_cap type="submit" value="Save">
</form>

我得到了

"NewYear matching query does not exist." and cannot save the data.

我已经研究这个问题好几天了。任何帮助将不胜感激。

最佳答案

是的,你说得对

POST data is not coming as dictionary.

您正在循环年份并渲染表单内的 selectinput 标记以及所有 selectname 属性> 和 input 标签相同,即 ratingyear 同时使用

在这种情况下,当您提交表单时,您将获得一个评级年份列表,因此您应该使用getlist()方法,同时从 request.POST QueryDict 中获取它。

request.POST.getlist('rating[]')
request.POST.getlist('year[]')

如果上面不起作用,请使用它

request.POST.getlist('rating', [])
request.POST.getlist('year', [])

更新您的费率方法,例如。

class ChoiceManager(models.Manager):
def rates (self, Assignment_id, rating, year):
...
# you can use year also to find the length
for i in range(len(rating)):
rated = Choice.create(
assignment = assignment,
year = year[i],
rating = rating[i]
)

更改方法调用。

rates = Choice.objects.rates(Assignment_id,request.POST.getlist('rating[]'), request.POST.getlist('year[]'))

关于python - Django - 以一种形式保存多个选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com