Django:如何通过视图更新模型属性?

2024-03-28 13:09:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有专辑和歌曲。在特定的相册页面,我想通过单击“添加歌曲”按钮添加歌曲并返回到该相册的页面: Album's page 从打开很好,让我输入歌曲标题。 但当我单击“提交”时,它会出现以下异常: Exception 以下是模板代码的一部分,其中表单被调用:

{% block body %}

<div class="container-fluid" style="position:relative; padding-left: 100px; padding-top: 50px;">
    <img src="{{ album.album_logo.url }}" class="img-responsive" height="200" width="200">

    <h1>{{ album.album_title }}</h1>
    <h3>{{ album.artist }}</h3>

    {% for song in album.song_set.all %}
        {{ song.song_title }}
        {% if song.is_favorite %}
            <img src="http://vignette1.wikia.nocookie.net/defendersquest/images/1/17/Yellow_star_small.png/revision/latest?cb=20120430053933"
            height="10" width="10"/>
        {% endif %}
        <br>
    {% endfor %}

    <a href="{% url 'music:song-add' album.pk %}">
        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&nbsp; Add Song
    </a>
</div>

{%endblock%}

给你网址.py公司名称:

^{pr2}$

给你视图.py部分:

class SongCreate(CreateView):
    model = Song
    fields = ['song_title']

    def form_valid(self, form):
        form.instance.album.pk = self.request.GET.get('album_pk')
        return super(SongCreate, self).form_valid(form)

这是模型.py公司名称:

class Album(models.Model):
    # attributes/columns:
    artist = models.CharField(max_length=250) #CharField is the info on type of info that var holds
    album_title = models.CharField(max_length=500)
    genre = models.CharField(max_length=100)
    album_logo = models.FileField()

    def get_absolute_url(self):
        return reverse('music:detail', kwargs={'pk': self.pk})
    def __str__(self): #string representation of Album objects
        return self.album_title + ' - ' + self.artist

class Song(models.Model):
    #attributes/columns:
    album = models.ForeignKey(Album, on_delete=models.CASCADE)  #linking songs to Albums!!!
    file_type = models.CharField(max_length=10)
    song_title = models.CharField(max_length=250)
    is_favorite = models.BooleanField(default=False)

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

    def __str__(self):
        return self.song_title

Tags: selfformalbumreturnsongtitlemodelsdef
1条回答
网友
1楼 · 发布于 2024-03-28 13:09:36

您没有正确设置相关的ForeignKey对象。您可以使用模型实例中相关对象的hidden_id字段访问相关字段的pk:

form.instance.album_id = self.request.GET.get('album_pk')

相关问题 更多 >