簡體   English   中英

Django admin-'NoneType'對象沒有屬性'_deferred'

[英]Django admin - 'NoneType' object has no attribute '_deferred'

我嘗試將數據導入到解析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'

我不明白為什么您要覆蓋admin類中的這些方法以使其return -您實際上需要在其中調用save方法。

但是,直接問題的根源在於您沒有從表單的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM