Django. IntegrityError: Сбой ограничения NOT NULL: MyApp_song.albums_id - PullRequest
0 голосов
/ 07 апреля 2020

Для начала я только начал изучать Django.

Я пытаюсь добавить новый объект песни в свой альбом через форму. Но я не хочу вручную выбирать альбом (мой внешний ключ), в который я хочу добавить новую песню. Вместо этого я хочу, чтобы значение моего внешнего ключа было установлено в зависимости от альбома, из которого я добавляю новую песню. Кроме того, я вообще не хочу видеть поле внешнего ключа в моей форме. Как я могу сделать это в Django?

Я пытался сделать это так:

views.py

class SongCreate(CreateView):
template_name = 'music/album_form.html'

# fields = ['albums', 'file_type', 'song_title', 'audiotrack', 'is_favorite']

model = Song
fields = ['file_type', 'song_title', 'audiotrack', 'is_favorite']

def form_valid(self, form):
    album = get_object_or_404(Album, pk=self.kwargs['pk'])

    form.instance.album = album
    return super(SongCreate, self).form_valid(form)

urls.py

path('music/album/<int:pk>/add', views.SongCreate.as_view(), name='song-add'),

models.py

class Song(models.Model):
albums = models.ForeignKey(Album, on_delete=models.CASCADE)
file_type = models.CharField(max_length=10)
song_title = models.CharField(max_length=250)
audiotrack = models.FileField(upload_to='media/')
is_favorite = models.BooleanField(default=False)

def get_absolute_url(self):
    return reverse('param', kwargs={'pk': self.albums.id})

def __str__(self):
    return self.song_title

Ссылка для добавления нового альбома

                        <a href="{% url 'song-add' album.id %}">Add album</a>

Но по какой-то причине это не работает, хотя я думал, что это должно помочь. Так что я получаю эту ошибку. Может быть, вы знаете, в чем проблема?

Спасибо, любая помощь будет оценена!

...