Для начала я только начал изучать 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>
Но по какой-то причине это не работает, хотя я думал, что это должно помочь. Так что я получаю эту ошибку. Может быть, вы знаете, в чем проблема?
Спасибо, любая помощь будет оценена!