簡體   English   中英

如果 model._meta.abstract:AttributeError:類型 object 'ProductObject' 沒有屬性 '_meta'

[英]if model._meta.abstract: AttributeError: type object 'ProductObject' has no attribute '_meta'

我想將我的模型之一添加到管理面板,但出現此錯誤:

> Traceback (most recent call last):   File
> "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\threading.py",
> line 932, in _bootstrap_inner
>     self.run()   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\threading.py",
> line 870, in run
>     self._target(*self._args, **self._kwargs)   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\autoreload.py",
> line 53, in wrapper
>     fn(*args, **kwargs)   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\commands\runserver.py",
> line 109, in inner_run
>     autoreload.raise_last_exception()   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\autoreload.py",
> line 76, in raise_last_exception
>     raise _exception[1]   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\__init__.py",
> line 357, in execute
>     autoreload.check_errors(django.setup)()   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\autoreload.py",
> line 53, in wrapper
>     fn(*args, **kwargs)   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\__init__.py",
> line 24, in setup
>     apps.populate(settings.INSTALLED_APPS)   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\apps\registry.py",
> line 122, in populate
>     app_config.ready()   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\apps.py",
> line 24, in ready
>     self.module.autodiscover()   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\__init__.py",
> line 26, in autodiscover
>     autodiscover_modules('admin', register_to=site)   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\module_loading.py",
> line 47, in autodiscover_modules
>     import_module('%s.%s' % (app_config.name, module_to_search))   File
> "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py",
> line 127, in import_module
>     return _bootstrap._gcd_import(name[level:], package, level)   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import   File
> "<frozen importlib._bootstrap>", line 991, in _find_and_load   File
> "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked 
> File "<frozen importlib._bootstrap>", line 671, in _load_unlocked  
> File "<frozen importlib._bootstrap_external>", line 783, in
> exec_module   File "<frozen importlib._bootstrap>", line 219, in
> _call_with_frames_removed   File "C:\Users\smirn\OneDrive\Desktop\SYZYGY\Coding\Python\Django\Megan\Fridge\admin.py",
> line 13, in <module>
>     admin.site.register([Product, Fridge, ProductObject])   File "C:\Users\smirn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\sites.py",
> line 104, in register
>     if model._meta.abstract: AttributeError: type object 'ProductObject' has no attribute '_meta'

模型.py:

from django.db import models as m
from django.conf import settings
import datetime

def mounth():
    now = datetime.datetime.now()
    return now + datetime.timedelta(days=20)

class Product(m.Model):
    product_name = m.CharField(max_length=200)
    product_calories = m.PositiveIntegerField(blank=True)

    def __str__(self):
        return self.product_name


class Fridge(m.Model):
    OPTIONS = (
        ("1", "BASIC"),
        ("2", "PRO"),
        ("3", "KING"),
    )

    fridge_owner = m.ForeignKey(settings.AUTH_USER_MODEL, on_delete=m.CASCADE)
    fridge_mode = m.CharField(max_length=5, choices=OPTIONS)


class Recipe(m.Model):
    recipe_name = m.CharField(max_length=200)
    recipe_products = m.ManyToManyField(Product)
    recipe_description = m.TextField()

    def __str__(self):
        return self.recipe_name


class ProductObject(): # Не знаю как сделать правильно. Вдруг это можно реализовать по другому
    product_obj_fridge = m.ForeignKey(Fridge, on_delete=m.CASCADE)
    product_obj_product = m.ManyToManyField(Product)
    product_shelf_life = m.DateField(default=mounth())
    product_count = m.PositiveIntegerField(default=1)

    class Meta:
        ordering = ('product_shelf_life', )

管理員.py:

from django.contrib import admin
from .models import Product, Fridge, Recipe, ProductObject
from tinymce.widgets import TinyMCE
from django.db import models
# Register your models here.


class RecipeAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': TinyMCE}
    }

admin.site.register([Product, Fridge, ProductObject])
admin.site.register(Recipe, RecipeAdmin)

如果我在管理面板的注冊中刪除ProductObject,那么不會有錯誤,但我根本不明白這個錯誤。 似乎一切都應該是正確的,但由於某種原因不是請幫幫我!

ProductObject中,您在定義中缺少m.Model

沒有這個, Meta字段就不能被構造。

暫無
暫無

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

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