Python 属性错误:';元组';对象没有属性';获取';在Django

Python 属性错误:';元组';对象没有属性';获取';在Django,python,django,Python,Django,我想在我的项目应用程序中添加一个多选字段。此字段应允许用户选择多个选项。但是我犯了一个错误。在我添加多选字段之前,这部分没有给出任何错误。我的错在哪里 我的观点。py def project_new(request): if request.method == 'POST': form = ProjectForm(request.POST) if form.is_valid(): project = Project() ... pro

我想在我的项目应用程序中添加一个多选字段。此字段应允许用户选择多个选项。但是我犯了一个错误。在我添加多选字段之前,这部分没有给出任何错误。我的错在哪里

我的观点。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})
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)
    ...
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')
my models.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})
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)
    ...
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')
forms.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})
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)
    ...
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')
这是我的回溯

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

错误可能是您将
super(ProjectForm,self).\uuuu init\uuuu
args
kwargs
作为两个参数调用,而不是顺序解包和字典解包,例如:

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()
    ]
def\uuuu init\uuuu(self,*args,**kwargs):
super(ProjectForm,self)。\uuuuu init\uuuuu(*args,**kwargs)
self.fields['select_lang'].选项=[
(l.id,l.name)在ProgrammingLanguage.objects.all()中表示l
]
如果您使用
参数
等调用它,第一个参数将包含一个元组(可能为空),作为
数据
参数。如果您随后打算处理
数据
,则该操作将失败


话虽如此,我不明白你为什么要在这里设置一个
forms.ChoiceField
。默认情况下,Django将选择一个字段,并且默认情况下还将整个
ProgrammingLanguage
集合作为对象。

错误可能是您调用
super(ProjectForm,self)。\uuuuu init\uuuuu
kwargs
作为两个参数,不使用序列解包和字典解包,例如:

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()
    ]
def\uuuu init\uuuu(self,*args,**kwargs):
super(ProjectForm,self)。\uuuuu init\uuuuu(*args,**kwargs)
self.fields['select_lang'].选项=[
(l.id,l.name)在ProgrammingLanguage.objects.all()中表示l
]
如果您使用
参数
等调用它,第一个参数将包含一个元组(可能为空),作为
数据
参数。如果您随后打算处理
数据
,则该操作将失败


话虽如此,我不明白你为什么要在这里设置一个
forms.ChoiceField
。默认情况下,Django将选择一个字段,并且默认情况下还将获取对象的整个
ProgrammingLanguage
集合。

请显示完整的回溯。错误发生在哪里?将回溯添加到您的问题中。您在这里包含的代码中没有
get
方法调用。您使用
args
kwargs
调用
\uuu init\uuu
,而不是
*args
**kwargs
。请显示完整的回溯。错误发生在哪里?将回溯添加到您的问题。在您包含的代码中没有
get
方法调用。您使用
args
kwargs
调用
\uuu init
,而不是
*args
**kwargs
。我还有一个问题。我想在我的项目详细信息页面中显示用户的选择。如何在我的HTML页面中实现这一点?您可以使用
{%for lang in project.select_langs%}
(以
{%endfor%}
结束)迭代编程语言,因此在循环中,例如print
{lang}
。我还有一个问题。我想在我的项目详细信息页面中显示用户的选择。如何在我的HTML页面中执行此操作?您可以使用
{%for lang in project.select_langs%}
(以
{%endfor%}
结尾)在编程语言上进行迭代,从而在循环中打印
{{lang}