我是Django的新手,我正在尝试创建一个"游戏";具有两个属性的模型:
- 多对一字段,其中游戏模型的多个实例与自定义用户模型的一个实例相关联
- 多对多领域,其中游戏模型的实例与单词的多个实例相连接,单词模型的实例则与游戏模型的多个例子相连接
我的顶级模型.py模型:
from django.db import models
from users.models import CustomUser
from django.contrib.postgres.fields import ArrayField
游戏模型:
class SortingGame(models.Model):
user_current_player = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
field_words = models.ManyToManyField(Word, related_name="field_sorting_games")
单词模型:
class Word(models.Model):
str_word = models.CharField(max_length=50,null=True)
int_grade_level = models.IntegerField()
arrint_phonemes = ArrayField(models.CharField(max_length=50),null=True)
arrstr_graphemes = ArrayField(models.CharField(max_length=50),null=True)
int_num_syllables = models.IntegerField()
arrstr_syllables = ArrayField(models.CharField(max_length=50),null=True)
用户型号:
class CustomUser(AbstractBaseUser):
# must have the following fields for django
email = models.EmailField(verbose_name="email",max_length = 100,unique=True)
username = models.CharField(max_length = 30, unique = True)
date_joined = models.DateTimeField(verbose_name = "date_joined",auto_now_add=True)
last_login = models.DateTimeField(verbose_name = "last_login",auto_now = True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
is_active = models.BooleanField(default = True)
first_name = models.CharField(max_length=15, blank=True)
last_name = models.CharField(max_length=30, blank=True)
spelling_level = models.IntegerField(default=1, unique=False)
time_played = models.IntegerField(default=0, unique=False)
percent_correct = models.IntegerField(default=0, unique=False)
admin.py:
from django.contrib import admin
from .models import Word, SortingGame
admin.site.register(SortingGame)
当我运行python3 manage.py makemigrations
和python3 manage.py migrate
时,它不会抱怨,但当我转到django网站的管理页面时,它会显示psycopg2.errors.UndefinedColumn: column "user_current_player_id" of relation "game_sortinggame" does not exist
。
这让我认为问题出在排序游戏中的user_current_player上(在我添加该属性之前,它运行良好(,但我在不同的论坛上四处查看,看看可能出了什么问题,但我似乎无法弄清楚。我尝试从头开始使用一个新数据库,但它仍然抛出相同的异常。任何想法都将不胜感激——谢谢!
Nathan!第一件事是确保您的settings.py文件中有创建CustomUser模型的应用程序,位于INSTALLED_APPS。如果是,请查看您定义了CustomUser的文件夹(应用程序(,以验证那里是否确实有迁移文件夹。
我怀疑Django不知道这个应用程序(不在INSTALLED_APPS下(,因此没有迁移它。所以,你的数据库找不到用户模型连接。
也就是说,我建议你保留Django User定义的账户模型,并创建另一个与之直接相关的模型来处理个人资料/游戏字段,如拼写级别、percentage_correct等。
这将保持您的模型";关注";
如果您在尝试使用(python manage.py makemigrations-appname(之前进行了迁移
也在那之后,你需要在你的管理员中添加模块.py
from django.contrib import admin
from .models import *
admin.site.register(SortingGame)
... all other modules