首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django 2.2中注册admin.py中抽象类的派生子类

在django 2.2中注册admin.py中抽象类的派生子类
EN

Stack Overflow用户
提问于 2019-12-01 09:55:34
回答 1查看 240关注 0票数 0

有人知道如何在中注册从抽象类派生的admin.py子类(抽象类在文件abstract_models.py文件中)--我在web上尝试了主要的解决方案,但似乎不起作用。这是可能的,因为不同的贡献者指出,但不知道我做错了什么!

我的文件夹结构是这样的

“”“

代码语言:javascript
复制
gaasc/ <- project folder

     contain urls.py, admin.py,models.py,etc

gaasc_apps/<- contains all apps

    core/
       abstract_models.py
       models.py
       admin.py,...

    about_app/
      models.py, 
      admin.py
      urls.py

“”“

我试图利用核心应用程序中的抽象类来构建about_app应用程序中的模型。是的,在不同的应用程序之间。

采取的步骤如下:

在core/models.py中导入

  1. 创建abstract_models.py并定义抽象类

3.从core/models.py导入about_app/models.py中的抽象类

_

  1. 将类注册到admin.py(in _app/)

abstract_models.py文件(在核心/抽象_Models.py中)

代码语言:javascript
复制
import uuid
from django.db import models


class AbstractTimeStampModel(models.Model):
     """TimeStampModel that holds created_date and updated_date       field"""
     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
     created_date = models.DateTimeField("Created date", auto_now_add=True)
     updated_date = models.DateTimeField("Updated date", auto_now=True)

    def __str__(self):
        return self.created_date

    class Meta:
        abstract = True

class AbstractTextAreaOnly(AbstractTimeStampModel):
     """Abstract class for textfield"""

    about = models.TextField(
        verbose_name="Description",
        blank=True
    )

    def __str__(self):
        return "Textonly class-"+self.id

    class Meta:
        ordering = ['created_date']

models.py in core/models.py s.py

代码语言:javascript
复制
from django.db import models
from .abstract_models import (
      AbstractTextAreaOnly,
)

现在,我想在about_app/models.py中使用这个抽象类/所以我在models.py中的派生类看起来是:

代码语言:javascript
复制
  from django.db import models
  from gaasc_apps.core.models import(
      AbstractTextAreaOnly,
  )

  class GeneralInformation(AbstractTextAreaOnly):
     '''
     Gives general information of college
     '''

     class Meta():
         db_table = "general_information"
         verbose_name="General information"
         ordering=['created_date']

我尝试了什么:

我尝试使用以下方式进行注册:

method1:

about_app/admin.py中的admin.py中

代码语言:javascript
复制
from django.contrib import admin
from .models import (
    GeneralInformation,
)

@register(GeneralInformation)
class GeneralInformationAdmin(admin.ModelAdmin):
    pass

方法2:

在大约app/Admin.py

代码语言:javascript
复制
from django.contrib import admin
from .models import (
    GeneralInformation,
)

class GeneralInformationAdmin(admin.ModelAdmin):
   pass

admin.site.register(GeneralInformation,GeneralInformationAdmin)

method3:

在大约app/Admin.py

代码语言:javascript
复制
  ......
  class GeneralInformationAdmin(admin.ModelAdmin):
     readonly_fields = ('id','about','created_date','updated_date')
     list_display=('id','about','created_date')
     fieldsets=[
        ('Id',{'fields':['id']}),
        ('About',{'fields':['about']}),
        ('Created_Date',{'fields':['created_date']}),
     ]

     admin.site.register(GeneralInformation,GeneralInformationAdmin)

对于所有这些解决方案,django的admin /仪表板中没有显示GeneralInformation。解决办法似乎很简单,但我不知道为什么不起作用?我尝试过的一些解决方案如下:

How to register inherited sub class in admin.py file in django?

Django admin model Inheritance is it possible?

Register abstract model in admin django 1.6

版本: Django-2.2 python-3.6

EN

回答 1

Stack Overflow用户

发布于 2019-12-02 00:56:02

我已经找到了解决这个问题的方法,很简单,我们需要在每个应用程序中定义配置设置。由于缺少配置设置和perticular目录结构,它无法读取它。

about_app/__init__.py中:

代码语言:javascript
复制
default_app_config = "gaasc_apps.about_app.apps.AboutAppConfig"

about_app/apps.py,我们应该像这样

代码语言:javascript
复制
from django.apps import AppConfig


class AboutAppConfig(AppConfig):
    name = 'gaasc_apps.about_app'
    verbose_name="about application"

    def ready(self):
        pass
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59124414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档