Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么“模型”对象不可编辑?_Python_Django_Django Forms_Django Admin - Fatal编程技术网

Python 为什么“模型”对象不可编辑?

Python 为什么“模型”对象不可编辑?,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,我正在尝试仅在我的管理面板中添加radioselect。我使用多对多字段来连接另一个模型背景的对象 我现在有:收音机选择在这里,在管理面板上工作,但是当我继续并保存更改时,我得到了这个错误:“背景”对象是不可编辑的 如何将信息保存并保持为选中状态 MyApp/models.py MyApp/forms.py MyApp/admin.py 我无法调试这个问题,我很高兴知道它来自何处,以及如何解决它 编辑: 添加了回溯: Traceback: File "C:\Python34\lib\site-p

我正在尝试仅在我的管理面板中添加radioselect。我使用多对多字段来连接另一个模型背景的对象

我现在有:收音机选择在这里,在管理面板上工作,但是当我继续并保存更改时,我得到了这个错误:“背景”对象是不可编辑的

如何将信息保存并保持为选中状态

MyApp/models.py

MyApp/forms.py

MyApp/admin.py

我无法调试这个问题,我很高兴知道它来自何处,以及如何解决它

编辑:

添加了回溯:

Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in wrapper
  618.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in change_view
  1521.         return self.changeform_view(request, object_id, form_url, extra_context)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python34\lib\contextlib.py" in inner
  30.                 return func(*args, **kwds)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in changeform_view
  1470.                 self.save_related(request, form, formsets, not add)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in save_related
  1102.         form.save_m2m()
File "C:\Python34\lib\site-packages\django\forms\models.py" in save_m2m
  102.                 f.save_form_data(instance, cleaned_data[f.name])
File "C:\Python34\lib\site-packages\django\db\models\fields\related.py" in save_form_data
  2603.         setattr(instance, self.attname, data)
File "C:\Python34\lib\site-packages\django\db\models\fields\related.py" in __set__
  1266.         value = tuple(value)

Exception Type: TypeError at /admin/multistepform/formone/75/
Exception Value: 'Background' object is not iterable
您不能使用radio小部件来创建多对多关系,因为django需要一个背景id数组,这是django在堆栈跟踪中抱怨的,而不是在您将数据发布到FormOneAdmin添加视图时抱怨的单个背景id

您可以注释掉ModelChoiceField的行,这样您就可以让它工作了

class FormOneForm(forms.ModelForm):
    class Meta:
        model = FormOne
        fields = ['name', 'background']

    # background = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=Background.objects.all(), required=False)
或者,如果仍然需要将零个或一个背景对象绑定到FormOne对象,则应使用ForeignKey而不是ManyToManyField。代码如下所示:

class FormOne(models.Model):
    name = models.CharField(max_length=40)
    # background = models.ManyToManyField(Background, blank=True)
    background = models.ForeignKey(Background, blank=True) # <-- use foreign key instead


class FormOneForm(forms.ModelForm):
    class Meta:
        model = FormOne
        fields = ['name', 'background']

    background = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=Background.objects.all(), required=False)


class FormOneAdmin(admin.ModelAdmin):
    fields = ['name', 'background']
    form = FormOneForm

请发布完整的stacktrace。@Jean Françoisfare我添加了跟踪。
Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in wrapper
  618.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in change_view
  1521.         return self.changeform_view(request, object_id, form_url, extra_context)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\utils\decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python34\lib\contextlib.py" in inner
  30.                 return func(*args, **kwds)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in changeform_view
  1470.                 self.save_related(request, form, formsets, not add)
File "C:\Python34\lib\site-packages\django\contrib\admin\options.py" in save_related
  1102.         form.save_m2m()
File "C:\Python34\lib\site-packages\django\forms\models.py" in save_m2m
  102.                 f.save_form_data(instance, cleaned_data[f.name])
File "C:\Python34\lib\site-packages\django\db\models\fields\related.py" in save_form_data
  2603.         setattr(instance, self.attname, data)
File "C:\Python34\lib\site-packages\django\db\models\fields\related.py" in __set__
  1266.         value = tuple(value)

Exception Type: TypeError at /admin/multistepform/formone/75/
Exception Value: 'Background' object is not iterable
class FormOneForm(forms.ModelForm):
    class Meta:
        model = FormOne
        fields = ['name', 'background']

    # background = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=Background.objects.all(), required=False)
class FormOne(models.Model):
    name = models.CharField(max_length=40)
    # background = models.ManyToManyField(Background, blank=True)
    background = models.ForeignKey(Background, blank=True) # <-- use foreign key instead


class FormOneForm(forms.ModelForm):
    class Meta:
        model = FormOne
        fields = ['name', 'background']

    background = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=Background.objects.all(), required=False)


class FormOneAdmin(admin.ModelAdmin):
    fields = ['name', 'background']
    form = FormOneForm