如何在django中使用id打开对象

时间:2017-07-09 05:51:17

标签: django-urls

我想用id打开对象,我有两个类,一个是其他的外键,现在我不知道如何更改我的视图功能这就是我正在做的事情。

models.py

from django.db import models

class Movie(models.Model):
    name= models.CharField(max_length = 100)
    movie_poster = models.FileField()

    def __str__(self):
        return self.name


class Songs(models.Model):
    movie = models.ForeignKey(Movie, default= 1)
    song_title = models.CharField(max_length=20)
    song_list = models.FileField()

    def __str__(self):
        return self.song_title

views.py

from django.shortcuts import render_to_response, get_object_or_404
from .models import Movie, Songs

def Movie_Songs(request, id):
    #movies = Movie.objects.all()
    #songs = Songs.objects.all()

    instance=get_object_or_404(Movie, id=id)
    context = {
        "name" : instance.name,
        "movie_poster" : instance.movie_poster,
        "movie" : instance.movie,
        "song_title": instance.song_title,
        "song_list": instance.song_list,
    }
    return render_to_response('profile_page.html', context)

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^profile/(?P<id>/d+)/$',views.Movie_Songs),
]

HTML

<h1>{{context.name}}</h1>

     {% for song in context %}
            <ol>
                <li>
                    <a href="{{song.song_list.url}}" target="_self"><h4>{{song.song_title}}</h4></a>
                </li>
            </ol>
            {% endfor %}
当我点击一个对象时,

上面的html会打开,对象有这个

<a href="profile/" target="new"><img width="170px" height="170px" src="{{ movie_item.movie_poster.url }}"></a>
            <h4>{{ movie_item.movie }}</h4>

2 个答案:

答案 0 :(得分:0)

使用django-rest framework使用serializations将模型数据转换为正确的JSON格式。

使用ModelSerializers来减少和有效编码。 其他有用的链接:foreign key field; FileField/ ImageField

答案 1 :(得分:0)

您忘记在网址id中提供该电影的href。希望现在有效。

<a href="profile/{{ movie_item.id }}/" target="new"><img width="170px" height="170px" src="{{ movie_item.movie_poster.url }}"></a>
            <h4>{{ movie_item.movie }}</h4>

以上代码应该可以正常运行。但如果您有命名空间的应用程序,则正确的方法如下。

项目网址文件

urlpatterns = [
    url(r'movie/', include('movie_app.urls', namespace='movie_app_namespace')),
]

电影应用网址文件

urlpatterns = [
    url(r'^profile/(?P<id>/d+)/$',views.Movie_Songs, name=''),
]

模板文件

<a href="{% url 'movie_app_namespace:movie_profile' %}" target="new"><img width="170px" height="170px" src="{{ movie_item.movie_poster.url }}"></a>
<h4>{{ movie_item.movie }}</h4>