在Django中获取表单的正确数据
目前,我从整个数据库获取数据,因此我尝试对其进行过滤,然后将过滤后的模型传递给表单,以便只显示与用户相关的数据。我是根据我在谷歌上找到的东西做的,但我得到了这个错误:在Django中获取表单的正确数据,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,目前,我从整个数据库获取数据,因此我尝试对其进行过滤,然后将过滤后的模型传递给表单,以便只显示与用户相关的数据。我是根据我在谷歌上找到的东西做的,但我得到了这个错误: too many values to unpack (expected 2) 这对我来说毫无意义,因为我正在按预期过滤数据。 这是我的密码: 型号: from django.db import models from django.contrib.auth.models import User from posts.models
too many values to unpack (expected 2)
这对我来说毫无意义,因为我正在按预期过滤数据。
这是我的密码:
型号:
from django.db import models
from django.contrib.auth.models import User
from posts.models import PDF
from children.models import Children
HEADER_CHOICES = [
('Financial Support', 'Financial Support'),
('Educational Support', 'Educational Support'),
('Governmental Support', 'Governmental Support '),
('Charity Support Groups', 'Charity Support Groups'),
('Therapy Support', 'Therapy Support '),
('Transport Support', 'Transport Support ')
]
AGE_CHOICES = [
('0-4', '0-4'),
('4-11', '4-11'),
('11-18', '11-18'),
('18-25', '18-25')
]
class Timeline(models.Model):
header = models.CharField(max_length=30, choices=HEADER_CHOICES)
age = models.CharField(max_length=6, choices=AGE_CHOICES)
child = models.ForeignKey(Children, on_delete=models.CASCADE)
class Pdf(models.Model):
pdf = models.FileField(upload_to='timelinepdfs')
timeline = models.ForeignKey(Timeline, on_delete=models.CASCADE)
儿童模型:
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.urls import reverse
from django.dispatch import receiver
from django.db.models import signals
DIAGNOSIS_CHOICES = [
(1, ("Yes")),
(2, ("No"))
]
class Children(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
age = models.CharField(max_length=100)
diagnosis = models.IntegerField(
choices= DIAGNOSIS_CHOICES,
)
disability = models.CharField(max_length=100)
parent = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.first_name + " " + self.last_name
def get_absolute_url(self):
return reverse('children-detail', kwargs={'pk': self.pk})
观点:
def upload(request):
if request.method == 'POST':
form = TimelineForm(request.POST, request.FILES)
form_pdf = PdfForm(request.POST, request.FILES)
if form.is_valid() and form_pdf.is_valid():
search_result = Timeline.objects.get(
Q(header = form.data['header']) & Q(age = form.data['age']) & Q(child = form.data['child'])
)
form_pdf.instance.timeline = search_result
form_pdf.save()
return redirect('timeline')
else:
children = Children.objects.filter(parent=request.user)
tl = Timeline.objects.filter(child=children)
pdf = Pdf.objects.filter(timeline = tl)
form = TimelineForm(tl)
form_pdf = PdfForm(pdf)
return render(request, 'upload.html', {
'form': form,
'form_pdf': form_pdf
})
完全错误:
Error during template rendering
In template /Users/fetz/Desktop/git/majorProjectEXO/parentsubportal/pages/templates/pages/home_page.html, error at line 9
too many values to unpack (expected 2)
1 {% load static %}
2 <html lang="en">
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <meta http-equiv="X-UA-Compatible" content="ie=edge">{% if title %}
7 <title>ParentSuportal - {{title}}</title>
8 {% else %}
9 <title>ParentSuportal</title>
10 {% endif %}
11 <link rel="icon" href="images/icon.png">
12 <!-- Bootstrap core CSS -->
13 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
14 <!-- <link rel="stylesheet" type="text/css" href="{% static 'pages/stylesheet.css' %}"> -->
15 <style>
16 @import url('https://fonts.googleapis.com/css?family=Bree+Serif|Righteous&display=swap');
17 #logo {
18 font-family: 'Bree Serif';
19 font-size: 40px;
Internal Server Error: /upload/
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/fetz/Desktop/git/majorProjectEXO/parentsubportal/timeline/views.py", line 40, in upload
'form_pdf': form_pdf
File "/usr/local/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/usr/local/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/usr/local/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 986, in render
output = self.filter_expression.resolve(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 670, in resolve
obj = self.var.resolve(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 795, in resolve
value = self._resolve_lookup(context)
File "/usr/local/lib/python3.7/site-packages/django/template/base.py", line 857, in _resolve_lookup
current = current()
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 299, in as_p
errors_on_separate_row=True,
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 197, in _html_output
top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 308, in non_field_errors
return self.errors.get(NON_FIELD_ERRORS, self.error_class(error_class='nonfield'))
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 175, in errors
self.full_clean()
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 376, in full_clean
self._clean_fields()
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py", line 388, in _clean_fields
value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
File "/usr/local/lib/python3.7/site-packages/django/forms/widgets.py", line 658, in value_from_datadict
return getter(name)
File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 404, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 904, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1350, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
check_filterable=check_filterable,
File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1247, in build_filter
arg, value = filter_expr
ValueError: too many values to unpack (expected 2)
读取堆栈跟踪时,错误似乎来自某种形式。我猜是在田野里。将元组字段更改为列表。并确保传递的字段与模型中的字段相同。我发现您缺少PdfForm中的“时间线”。以下是有效的答案:
class TimelineForm(forms.ModelForm):
class Meta:
model = Timeline
fields = ('header', 'age', 'child')
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['child'].queryset = Children.objects.filter(parent=user)
由于我遇到了另一个错误,我不得不制作另一个表单来传递正确的提交 它告诉你行号了吗?这个错误通常出现在元组的情况下,当你传入的值超过你所认为的值时。@HarshNagarkar它告诉我在我的主页.html中有一个行号,它没有任何意义ParentSuportal显示为红色的“tle>ParentSupor”你能把整个错误上传到问题吗?@HarshNagarkar刚刚做了。对不起,还是个问题。我用方括号来选择fields@Deephousemafia它起作用了吗?在添加字段名后,更改为列表。我的同事能够修复错误,他必须覆盖所用表单中的子字段,错误已修复。请您共享该共享,我非常感兴趣。是的,我的问题很快会有答案发布
class TimelineForm(forms.ModelForm):
class Meta:
model = Timeline
fields = ('header', 'age', 'child')
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['child'].queryset = Children.objects.filter(parent=user)