Django TypeError - TypeError: issubclass() arg 1 必须是一个类

Posted

技术标签:

【中文标题】Django TypeError - TypeError: issubclass() arg 1 必须是一个类【英文标题】:Django TypeError - TypeError: issubclass() arg 1 must be a class 【发布时间】:2021-10-12 09:09:47 【问题描述】:

我想在 django 应用程序中迁移我的配置,但控制台下方是 不工作。

python3 manage.py 迁移

python3 manage.py makemigrations

Traceback (most recent call last):
  File "/usr/src/frontend/manage.py", line 22, in <module>
    main()
  File "/usr/src/frontend/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/mungmung01/.local/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/home/mungmung01/.local/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/home/mungmung01/.local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/mungmung01/.local/lib/python3.9/site-packages/django/apps/registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File "/home/mungmung01/.local/lib/python3.9/site-packages/django/apps/config.py", line 228, in create
    if not issubclass(app_config_class, AppConfig):
TypeError: issubclass() arg 1 must be a class

我不知道出了什么问题。我在 django 应用程序中的配置很短。

这是我的 urls.py

from django.contrib import admin
from django.urls import path
from mungmung01.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', MainPage.as_view())
]

这是我的models.py

from django.db import models
from django.db.models.deletion import CASCADE

# 전체 데이터모델은 이곳에 구현되어 있습니다.
# PositiveInteger = unsigned int입니다.

class MainPageVisitor(models.Model):
    VisitorNum = models.PositiveIntegerField(primary_key=True, null=False) # 방문객번호
    NumVisit = models.PositiveSmallIntegerField(null=False) # 방문한 횟수
    ipAddress = models.GenericIPAddressField() # ip주소
    TimeVisited = models.DateTimeField(null=False) # 방문시간
    TimeLeft = models.DateTimeField(null=False) # 떠난시간
    Service = models.SmallIntegerField() # 이용한 서비스. 1=홀랜드 | 2=철학 | 3=엔지니어링 | 4=질의응답

这是我的意见.py

from django.http import request
from django.shortcuts import render
from django.contrib.auth.signals import user_logged_out # 클라이언트가 접속을 종료하는 시간을 재기 위해 추가
from django.views import ListView # 클래스형 뷰를 사용하기 위해 추가
from django.template import *
from .models import MainPageVisitor
from .views import MainPage
from ipware.ip import get_ip # ip주소 받기 위해 추가
from .views import *
import datetime
import pytz

class MainPage(ListView):
    visitornum = 0
    timeleft = user_logged_out.connect(request) # 떠난 시간
    def __init__(self, Visitor: MainPageVisitor, Page: MainPage):
        ip = get_ip(request)
        whethernewly = Visitor.objects.filter(ipAddress = ip) # 이 사이트에 방문한 적이 없는 경우 빈 리스트가 반환됩니다.
        if (whethernewly == []):
            Visitor.objects.create(VisitorNum = Page.visitornum, NumVisit = 1, ipAddress = ip,
               TimeVisited = datetime.datetime.now(pytz.timezone('Asia/Seoul')), TimeLeft = Page.timeleft)
        else:
            Visitor.objects.create(VisitorNum = Page.visitorNum, NumVisit = len(whethernewly), ipAddress = ip,
               TimeVisited = datetime.datetime.now(pytz.timezone('Asia/Seoul')), TimeLeft = Page.timeleft, Service = 1)
    def get(self, request):
        return render(request, 'index.html', context)
    def __del__(self, Page: MainPage):
        Page.visitornum += 1

在views.py中,我没有放Service列的值,但我想这不是问题。有问题吗?

而且任何配置都不存在。

ps。请忽略韩语评论。

【问题讨论】:

似乎是INSTALLED_APPS 的问题。你能展示一下你的应用配置吗? 【参考方案1】:

这个views.py比上面views.py好

from mungmung01.models import *
from django.shortcuts import render # html 파일 띄우기 위해 추가
from django.views import View # 클래스형 뷰를 사용하기 위해 추가
import datetime
import pytz

class MainPage(View):
    Visitor = MainPageVisitor # 다른 클래스 뷰에서 재정의 될 변수 2개만 정적 변수로 선언함.
    visitornum = len(Visitor.objects.all())
    def get(self, request):
        global visitornum # 나머지 변수 2개는 메소드 멤버로 선언
        timeVisited = datetime.datetime.now(pytz.timezone('Asia/Seoul'))
        if request.user.is_authenticated == False: # 접속이 종료될 때 실행
            x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') # ip 주소 변수
            if x_forwarded_for:
                ip = x_forwarded_for.split(',')[0]
            else:
                ip = request.META.get('REMOTE_ADDR')
            whethernewly = self.Visitor.objects.filter(ipAddress = ip) # 이 사이트에 방문한 적이 없는 경우 빈 리스트가 반환됩니다.
            if (whethernewly == []):
                self.Visitor.objects.create(VisitorNum = self.visitornum, NumVisit = 1, ipAddress = ip,
                    TimeVisited = timeVisited, TimeLeft = datetime.datetime.now(pytz.timezone('Asia/Seoul')))
            else:
                self.Visitor.objects.create(VisitorNum = self.visitornum, NumVisit = len(whethernewly), ipAddress = ip,
                    TimeVisited = timeVisited, TimeLeft = datetime.datetime.now(pytz.timezone('Asia/Seoul')))
        return render(request, request.get_full_path()[1:] + '/index.html', 'visitornum': self.visitornum)

【讨论】:

【参考方案2】:

我配置views.py 看起来像这样。而且很成功。

from django.http import request
from django.shortcuts import render
from django.contrib.auth.signals import user_logged_out # 클라이언트가 접속을 종료하는 시간을 재기 위해 추가
from django.views import View # 클래스형 뷰를 사용하기 위해 추가
from django.template import *
from typing import TypeVar # 제네릭을 쓰기 위해 추가
from ipware.ip import get_ip # ip주소 받기 위해 추가
from .views import *
import datetime
import pytz

MainPageVisitor = TypeVar('MainPageVisitor')

class MainPage(View):
    visitornum = 0
    timeleft = user_logged_out.connect(request) # 떠난 시간
    def __init__(self, Visitor: MainPageVisitor):
        ip = get_ip(request)
        whethernewly = Visitor.objects.filter(ipAddress = ip) # 이 사이트에 방문한 적이 없는 경우 빈 리스트가 반환됩니다.
        if (whethernewly == []):
            Visitor.objects.create(VisitorNum = self.visitornum, NumVisit = 1, ipAddress = ip,
               TimeVisited = datetime.datetime.now(pytz.timezone('Asia/Seoul')), TimeLeft = self.timeleft)
        else:
            Visitor.objects.create(VisitorNum = self.visitorNum, NumVisit = len(whethernewly), ipAddress = ip,
               TimeVisited = datetime.datetime.now(pytz.timezone('Asia/Seoul')), TimeLeft = self.timeleft, Service = 1)
    def get(self, request):
        return render(request, 'index.html', context)
    def __del__(self):
        self.visitornum += 1

【讨论】:

以上是关于Django TypeError - TypeError: issubclass() arg 1 必须是一个类的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法使用“in”运算符在未定义中搜索“$__firebase”

无法从 nextjs 中的 api 获取图像-TypeError:无法读取未定义的属性(读取“地图”)NEXTJS

Django:'TypeError:'HttpResponseForbidden'对象不可调用

django:TypeError:'tuple'对象不可调用

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

Django:“TypeError:[] 不是 JSON 可序列化的”为啥?