【问题标题】:How to have my users add song to an album in django如何让我的用户将歌曲添加到 django 的专辑中
【发布时间】:2017-07-17 12:23:48
【问题描述】:

我正在尝试通过表单添加歌曲,但不断收到

NOT NULL 约束失败:post_song.album_id。

目前只能随机添加歌曲,与原专辑没有关联。

from django.db import models
from django.core.urlresolvers import reverse
from django.conf import  settings
from django.contrib.auth.models import User


class Album(models.Model):
    creator = models.CharField(max_length=250)
    album_name = models.CharField(max_length=250)
    album_photo = models.FileField()
    author = models.ForeignKey(User, blank=True, null=True, related_name ='album_post')
    category = models.ManyToManyField(Category)

    def get_absolute_url(self):
        return reverse('post:detail', kwargs={'pk': self.pk})

    def __str__(self):
        return self.creator + ' - ' + self.album_name

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE, null=True)
    song_name= models.CharField(max_length=1000)

    def __str__(self):
        return  self.song_name
    def get_absolute_url(self):
        return reverse('post:detail', kwargs={'pk': self.pk})

views.py

class SongAdd(CreateView):
    model = Song
    fields = ['song_name']

    def form_valid(self, form):
        form.instance.album_id = self.request.GET.get('album_pk')
        return super(SongAdd, self).form_valid(form)

详情页

{% block body %}
<div class="container-fluid">

    <div class="row">

        <div class="col-sm-12 col-md-7">
            <div class="panel panel-default">
                <div class="panel-body">

                    <form class="form-horizontal" action="" method="post"  enctype="multipart/form-data">
                        {% csrf_token %}
                        {% include 'post/form-template.html' %}
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-success">Submit</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>          
    </div>

</div>
{% endblock %}

【问题讨论】:

  • 嗯,专辑价值应该从哪里来?
  • 在数据库中存储歌曲时不应该传递专辑的id吗?
  • @CarlosAfonso 新更新的代码地址,但它仍然没有连接到父相册
  • 您创建并运行迁移了吗?
  • @CarlosAfonso 是的,它现在可以添加歌曲,但它们没有连接到任何专辑。

标签: python css django django-models


【解决方案1】:

在您看来,您缺少相册字段。该表单不知道您要将歌曲关联到哪个专辑。

【讨论】:

  • 解决方案是在表单中添加一个组合框 (&lt;select&gt;),其中包含数据库中可用的所有专辑
  • 我今天尝试了一下,我可以添加歌曲,但他们没有父专辑
  • 您应该删除您手动设置相册的 form_valid() 中的代码。 Django 会自动将相册设置为您在表单中选择的相册。
  • 怎么样?因为这就是我现在的问题。 def form_valid(self, form): album= Album.objects.get(pk) form.instance.album= album return super(SongAdd, self).form_valid(form)
【解决方案2】:

试试这个:

views.py

​​>
class SongAdd(CreateView):
    model = Song
    fields = ['song_name']

    def form_valid(self, form):
        album = Album.objects.get(pk=album_id_variable)
        form.instance.album = album
        return super(SongAdd, self).form_valid(form)

确保album_id_variable 是有效的专辑ID。

【讨论】:

  • 行得通,谢谢!我仍然需要尝试了解更多关于它的信息,我可以在任何地方阅读更多信息
  • 您可以查看Django documentation 本身。这是一个很好的资源。此外,不要忘记为您的问题选择一个答案,以将此问题标记为已回答。
猜你喜欢
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多