Модель, кажется, не наследуется - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь, чтобы один класс относился к другому в моем models.py, но кажется, что только мой класс Card правильно относится к Subject.Я пытаюсь, чтобы они соотносились примерно так: «Каждый стек будет иметь несколько Субъектов, и каждая категория будет иметь несколько Карт. При запуске миграции у меня нет ошибок, но только говорит:

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

Только на основании моих результатов миграции кажется, что только карта была связана с темой, а тема не была связана со стеком, или я неправильно прочитал это, и он работал нормально? Я новый программист, и только учуськак проверить.

models.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

1 Ответ

1 голос
/ 30 марта 2019

Вы, похоже, немного неверно истолковали вывод, полученный при запуске makemigrations, здесь все работает как положено.

Я создал тестовый проект, используя предоставленный вами код, и запустил makemigrations на flashcards приложение.Просмотр содержимого сгенерированного файла миграции 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 добавлено на шаге - Create model Subject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...