0

I want to open objects using id, I have two classes one is foreign key to other now i am not sure how to change my view function this is what i am doing.

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 %}

above html will open when i click on an object,object has this

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

2 Answers2

0

Use django-rest framework to convert model data into proper JSON format using serializations.

Use ModelSerializers to code less and effectively. Other useful links: for foreign key field ; for FileField/ ImageField

aashu
  • 105
  • 1
  • 14
0

You forgot to provide the id of the movie in the url href. Hope this works now.

<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>

The above code should work perfectly. But the correct way is the following if you have namespaced apps.

Project URL file

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

Movie app URL file

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

Template file

<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>
MiniGunnR
  • 5,590
  • 8
  • 42
  • 66