Django 管理员 - 'NoneType' 对象没有属性“_deferred”

Django admin - 'NoneType' object has no attribute '_deferred'

我尝试将数据导入 db parsing textarea,但我得到了这个错误: 'NoneType' object has no attribute '_deferred'。我做错了什么?谢谢。

# admin.py
class AppleAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        if obj is None:
            return AddApple

        super(AppleAdmin, self).get_form(request, obj=None, **kwargs)

    def save_model(self, request, obj, form, change):
        return

    def save_related(self, request, form, formsets, change):
        return

admin.site.register(Apple, AppleAdmin)

.

# models.py
class Apple(models.Model):
    banana = models.CharField(max_length=255)

    def add_banana(self, banana):
        self.banana = banana.replace('apple', 'banana')

.

# forms.py
class AddApple(forms.ModelForm):
    class Meta:
        model = Apple
        fields = ('apples',)

    apples = forms.CharField(widget=forms.Textarea)

    def save(self, commit=True):
        apples = []

        for x in self.cleaned_data.get("apples").splitlines():
             if not x.strip():
                 continue

             a = Apple()
             a.add_banana(x.strip())

             apples.append(a)

        Apple.objects.bulk_create(apples)

        super(AddApple, self).save(commit=commit)

所以,使用这段代码我得到了这个错误+回溯:

Traceback:
File "|site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "|site-packages\django\contrib\admin\options.py" in wrapper
  616.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "|site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "|site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "|site-packages\django\contrib\admin\sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "|site-packages\django\contrib\admin\options.py" in add_view
  1516.         return self.changeform_view(request, None, form_url, extra_context)
File "|site-packages\django\utils\decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "|site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "|site-packages\django\utils\decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "|contextlib.py" in inner
  30.                 return func(*args, **kwds)
File "|site-packages\django\contrib\admin\options.py" in changeform_view
  1470.                     self.log_addition(request, new_object)
File "|site-packages\django\contrib\admin\options.py" in log_addition
  808.             content_type_id=get_content_type_for_model(object).pk,
File "|site-packages\django\contrib\admin\options.py" in get_content_type_for_model
  65.     return ContentType.objects.get_for_model(obj, for_concrete_model=False)
File "|site-packages\django\contrib\contenttypes\models.py" in get_for_model
  53.         opts = self._get_opts(model, for_concrete_model)
File "|site-packages\django\contrib\contenttypes\models.py" in _get_opts
  31.         elif model._deferred:

Exception Type: AttributeError at /apples/apple/add/
Exception Value: 'NoneType' object has no attribute '_deferred'

我不明白你为什么将管理员 class 上的那些方法覆盖为 return - 你实际上需要在那里调用保存方法。

但是,您的直接问题的根源是您没有从表单的 save 方法返回对象。应该是:

return super(AddApple, self).save(commit=commit)

我觉得你这里有问题:

def get_form(self, request, obj=None, **kwargs):
    if obj is None:
        return AddApple

    super(AppleAdmin, self).get_form(request, obj=None, **kwargs)

应该是:

def get_form(self, request, obj=None, **kwargs):
    if obj is None:
        return AddApple

    return super(AppleAdmin, self).get_form(request, obj, **kwargs)

注意return,不要强迫obj=None