python - 模型似乎没有继承

标签 python django model

我试图在 models.py 中让一个类与另一个类相关,但似乎只有我的 Card 类与主题正确相关。我试图让它们像这样关联:“每个堆栈将有多个主题,每个类别将有多个卡片。当我运行迁移时,我没有错误,但它只说:

Migrations for 'flashcards':
flashcards/migrations/0001_initial.py
- Create model Card
- Create model Stack
- Create model Subject
- Add field subject to card

根据我的迁移输出,似乎只有 Card 与主题相关,但主题与堆栈无关,或者我读错了,它工作正常?我是一名新程序员,刚刚学习如何测试。

模型.py

from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib.auth.models import User

class Stack(models.Model): #A stack of cards that contains multiple 
categories
author = models.ForeignKey(User, on_delete = models.CASCADE)
title = models.CharField(max_length = 200, unique = True)
description = models.CharField(max_length = 300)
created_date = models.DateTimeField(default = timezone.now)
published_date = models.DateTimeField(blank = True, null = True)

def __str__(self):
    return self.title

class Subject(models.Model): #Subjects that are related to each stack
title = models.CharField(max_length = 200) #Title of the Category (ie: 
Spanish)
description = models.CharField(max_length = 300, null = True) 
#Category Description
stack = models.ForeignKey(Stack, on_delete = models.CASCADE)


class Card(models.Model): #cards that are related to each subject
subject = models.ForeignKey(Subject, on_delete = models.CASCADE)
key = models.CharField(max_length = 300) #Card Question
answer = models.CharField(max_length = 300) # Card Answer

最佳答案

您似乎稍微误解了运行 makemigrations 得到的输出,这里一切都按预期工作。

我使用您提供的代码创建了一个测试项目,并在 flashcards 应用程序上运行 makemigrations。查看生成的迁移文件0001_initial.py的内容:

# Generated by Django 2.1.7 on 2019-03-30 03:20

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(  # Summarised as: - Create model Card
            name='Card',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('key', models.CharField(max_length=300)),
                ('answer', models.CharField(max_length=300)),
            ],
        ),
        migrations.CreateModel(  # Summarised as: - Create model Stack
            name='Stack',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200, unique=True)),
                ('description', models.CharField(max_length=300)),
                ('created_date', models.DateTimeField(default=django.utils.timezone.now)),
                ('published_date', models.DateTimeField(blank=True, null=True)),
                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(  # Summarised as: - Create model Subject
            name='Subject',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200)),
                ('description', models.CharField(max_length=300, null=True)),

                # As the ``Stack`` model has been created it can include the ForeignKey definition here.
                ('stack', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='flashcards.Stack')),
            ],
        ),
        migrations.AddField(  # Summarised as: - Add field subject to card
            model_name='card',
            name='subject',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='flashcards.Subject'),
        ),
    ]

运行 makemigrations 后看到的输出是生成的迁移文件的简要摘要。

由于 Django 创建模型的顺序,它无法将 subject 字段添加到 Card,因为 Subject 尚未创建然而。因此,它会跳过 subject 字段,并在创建 Subject 模型后添加它。

我可以理解为什么这看起来有点令人困惑,之所以没有明确的消息说 - Add field stack to subject 是因为添加了 stack 字段在- 创建模型主题 步骤中。

关于python - 模型似乎没有继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427561/

相关文章:

python - Django URL 正则表达式 : make URL tolerate int or float values

python - 字典更新序列元素 #0 的长度为 3;使用元组更新时需要 2

python - python 获取不匹配的行号

python - Django:具有多个子模型类型的父模型

javascript - 将单选按钮绑定(bind)到复杂对象会阻止选择

cakephp - 使用hasMany模型查找条件

python - 0o777 作为 mkdir 模式值的含义是什么?

django - geodjango gdal 3坐标顺序更改

python - Gunicorn 未在 AWS EC2 上创建 .sock 文件

python - Django 模型 : Inherit from variable abstract base class