python-3.x - Django 抛出 AttributeError: 'str' object has no attribute '_meta' 当我注册我的模型时
问题描述
我m novice and I didn
在这里找不到问题的解决方案。我m writing code for blog. I have a model Post where I want to create field author which is ForeighKey to User. If I make migration without admin.site.register - everything is ok. But then I
正在尝试将我的模型注册到 Django 管理员它抛出 AttributeError: 'str' object has no attribute '_meta'
评论:我的想法是每个用户(注册后)都可以创建帖子。我想展示一些关于作者使用用户模型的信息
模型.py
from django.db import models
from django.contrib.auth import get_user_model
class Post(models.Model):
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, verbose_name='Автор', related_name='posts', null=True)
title = models.CharField(verbose_name='Заголовок объявления', max_length=255)
text = models.TextField(verbose_name='Текст объявления')
CATEGORIES = (
('T','Танки'),
('HM','Хилы'),
('DD','ДД'),
('TrM','Торговцы'),
('GM','Гилдмастеры'),
('QG','Квестгиверы'),
('FM','Кузнецы'),
('LM','Кожевники'),
('PM','Зельевары'),
('WM','Мастера заклинаний')
)
category = models.CharField(verbose_name='Категория', max_length=3, choices=CATEGORIES)
pub_date = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
class Meta:
verbose_name = 'Пост'
verbose_name_plural = 'Посты'
def __str__(self):
return self.title
管理员.py
from django.contrib import admin
from .models import *
admin.site.register('Post')
解决方案
您需要传递对类的引用,而不是字符串文字,因此:
from django.contrib import admin
from app_name.models import Post
admin.site.register(Post)
您将在其中替换app_name
为定义Post
模型的应用程序的名称。
注意:请不要使用通配符导入 [quantifiedcode.com]。它使语句的可预测性降低,如果您以后决定更改某个模块中导出的内容,它很容易导致代码失败,而且它还可以覆盖变量。