在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)