Как установить поле по умолчанию в моем классе для перехода на мою базу данных sqlite в Django Rest? - PullRequest
0 голосов
/ 29 июня 2018

У меня проблемы при попытке выполнить следующий код на терминале Ubuntu:

$ python manage.py makemigrations

Мне нужно добавить поле с именем 'album' в моем классе с именем music, например:

models.py файл

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.


class Music(models.Model):

    class Meta:
        db_table = 'music'

    title = models.CharField(max_length=200)
    seconds = models.IntegerField()
    album = models.ForeignKey('Album', related_name='musics')

    def __str__(self):
        return self.title


class Album(models.Model):

    class Meta:
        db_table = 'album'

    title = models.CharField(max_length=200)
    band = models.ForeignKey('Band', related_name='albuns')
    date = models.DateField()

serializers.py файл

from rest_framework import serializers
from .models import Music, Band, Album, Member


class MusicSerializer(serializers.ModelSerializer):

    class Meta:

        model = Music
        fields = '__all__'

class BandSerializer(serializers.ModelSerializer):

    class Meta:

        model = Band
        fields = '__all__'

Получена моя ошибка:

(music) leonardo.oliveira@dss-skinner:~/django_music/myapi$ python manage.py makemigrations
You are trying to add a non-nullable field 'album' to music without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option: 2

1 Ответ

0 голосов
/ 29 июня 2018

То, что здесь происходит, это попытка добавить поле альбома в музыкальную модель. По определению этого поля

album = models.ForeignKey('Album', related_name='musics')

это необнуляемое поле. мгновенное исправление будет

album = models.ForeignKey('Album', related_name='musics', null=True)

но если вы хотите добавить альбом по умолчанию для этого поля, вы можете добавить файл по умолчанию, выполнив что-то вроде этого.

album = models.ForeignKey('Album', related_name='musics', default=Album.objects.first())

но чтобы это работало, у вас должен быть хотя бы один альбом в БД.

После внесения этих изменений вы запускаете

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