简体   繁体   English

AttributeError:“ tuple”对象在Django中没有属性“ get”

[英]AttributeError: 'tuple' object has no attribute 'get' in Django

I want to add a multiple choice field to my project app. 我想将多选字段添加到我的项目应用程序中。 This field should allow the user for select more than one choice. 此字段应允许用户选择多个选项。 But I get an error. 但是我得到一个错误。 Before I added the multiple choice field, this part did not give any error. 在添加多选字段之前,这部分没有给出任何错误。 Where is my mistake? 我的错误在哪里?

my views.py 我的views.py

def project_new(request):
if request.method == 'POST':
    form = ProjectForm(request.POST)
    if form.is_valid():
        project = Project()
       ...
        project.lang_choices = form.cleaned_data['select_lang']
        project.save()
        return redirect('projects')
else:
    form = ProjectForm()


  return render(request, 'blog/project_new.html', {'form': form})

@login_required(login_url='/login/')
def project_details(request, pk):
    project = get_object_or_404(Project, pk=pk)
    return render(request, 'blog/project_detail.html', {'project': project})

my models.py 我的models.py

class ProgrammingLanguage(models.Model):
name = models.CharField(max_length=100)

def __str__(self):
    return self.name
class Project(models.Model):
        ...
        select_langs = models.ManyToManyField(ProgrammingLanguage)
        ...
        slug = models.UUIDField(default=uuid.uuid4)
    ...

forms.py 表格

class ProjectForm(forms.Form):
...
select_lang = forms.ChoiceField(
    label='diller: ',
    widget=forms.CheckboxSelectMultiple()
)

def __init__(self, *args, **kwargs):
    super(ProjectForm, self).__init__(args, kwargs)



       self.fields['select_lang'].choices = [(l.id, l.name) for l in ProgrammingLanguage.objects.all()]


class Meta:
    model = Project
    fields = (
        'first_name', 'last_name', 'email', 'project_name', 'project_description', 'project_notes', 'select_langs')

And this is my traceback 这是我的回溯

Internal Server Error: /project/new/
Traceback (most recent call last):
  File "/home/eda/.local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/eda/.local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/eda/.local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/eda/.local/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/eda/staj_defteri/project/views.py", line 16, in project_new
    if form.is_valid():
  File "/home/eda/.local/lib/python2.7/site-packages/django/forms/forms.py", line 183, in is_valid
    return self.is_bound and not self.errors
  File "/home/eda/.local/lib/python2.7/site-packages/django/forms/forms.py", line 175, in errors
    self.full_clean()
  File "/home/eda/.local/lib/python2.7/site-packages/django/forms/forms.py", line 384, in full_clean
    self._clean_fields()
  File "/home/eda/.local/lib/python2.7/site-packages/django/forms/forms.py", line 396, in _clean_fields
    value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
  File "/home/eda/.local/lib/python2.7/site-packages/django/forms/widgets.py", line 240, in value_from_datadict
    return data.get(name)
AttributeError: 'tuple' object has no attribute 'get'
[17/Sep/2018 08:19:35] "POST /project/new/ HTTP/1.1" 500 98194

The error is probably the fact that you call the super(ProjectForm, self).__init__ with args , and kwargs as two parameters, not with sequence unpacking and dictionary unpacking, like: 错误可能是因为您使用argskwargs作为两个参数而不是序列解super(ProjectForm, self).__init__和字典解super(ProjectForm, self).__init__调用super(ProjectForm, self).__init__的事实,例如:

def __init__(self, *args, **kwargs):
    super(ProjectForm, self).__init__(*args, **kwargs)
    self.fields['select_lang'].choices = [
        (l.id, l.name) for l in ProgrammingLanguage.objects.all()
    ]

In case you call it with args , etc. the first parameter will contain a (possibly empty) tuple as data parameter. 如果使用args等调用它,则第一个参数将包含一个(可能为空)元组作为data参数。 If you then later aim to process the data , it will fail to do so. 如果随后您打算处理data ,它将无法进行处理。

That being said, I do not understand why you make it a forms.ChoiceField here. 话虽这么说,我不明白您为什么在这里将其forms.ChoiceField一个forms.ChoiceField By default Django will pick a ModelMultipleChoiceField [Django-doc] field, and also take by default the entire collection of ProgrammingLanguage onbjects. 默认情况下,Django将选择一个ModelMultipleChoiceField [Django-doc]字段,并且默认情况下还将接收全部ProgrammingLanguage onbjects集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django AttributeError:“ tuple”对象没有属性“ get” - Django AttributeError: 'tuple' object has no attribute 'get' /'tuple'对象的AttributeError在Django中没有属性'get' - AttributeError at / 'tuple' object has no attribute 'get' in Django Django - AttributeError: 'tuple' 对象没有属性 'get' [DRF, Stripe, Python] - Django - AttributeError: 'tuple' object has no attribute 'get' [ DRF, Stripe, Python ] “AttributeError: 'tuple' 对象在 django 应用程序上没有属性 'get'” - "AttributeError: 'tuple' object has no attribute 'get' " on django application AttributeError: 'tuple' 对象在 django 中没有带有重定向(反向)的属性 'get' - AttributeError: 'tuple' object has no attribute 'get' with redirect(reverse) in django Django表单保存问题AttributeError'tuple'对象没有属性'get' - Django form saving issue AttributeError 'tuple' object has no attribute 'get' django AttributeError: 'tuple' 对象没有属性 'rsplit' - django AttributeError: 'tuple' object has no attribute 'rsplit' AttributeError: 'tuple' object 没有属性 'rsplit' Django - AttributeError: 'tuple' object has no attribute 'rsplit' Django AttributeError:'tuple'对象没有属性'get' - AttributeError: 'tuple' object has no attribute 'get' AttributeError 'tuple' object 没有属性 'get' - AttributeError 'tuple' object has no attribute 'get'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM