Мне нужно сделать связь между фильмом и актером без использования многих полей я должен использовать только внешний ключ в django я написал этот код до сих пор

models.py


    class Movielist(models.Model) :
        Title = models.CharField(max_length=1000)
        Description = models.TextField(blank=True)
        ReleaseDate = models.DateTimeField(verbose_name='Release Date', blank=True)
        # NoOfActors = models.IntegerField()
        Upvote = models.IntegerField(default=0)
        Downvote = models.IntegerField(default=0)
        
        def __str__(self):
            return self.Title

    class Actorlist(models.Model):
        Name = models.CharField(max_length=1000)
        DateofBirth = models.DateTimeField(verbose_name='Date of Birth',blank=True)
        # NoOfActors = models.IntegerField()
    
        def __str__(self):
            return self.Name

    class ActorInMovie(models.Model):
        Movie = models.ForeignKey(Movielist, default=1, on_delete=models.CASCADE, blank=True)
        Actor = models.ForeignKey(Actorlist, default=1, on_delete=models.CASCADE, blank=True)
        
        def __str__(self):
            return self.Movie.Title



views.py


    def Movie_Detail(request):
        MovieName = Movielist.objects.all()
        tablelist = ActorInMovie.objects.all()
        return render(request, 'Collection/index.html', {'MovieName':MovieName, 'tablelist':tablelist})



index.html
<table border="solid">
        <th>Name</th>
        <th>Release Date</th>
        <th>Actors</th>
        {% for data in MovieName %}
        <tr>
            <td>{{ data.Title }}</td>
            <td>{{ data.ReleaseDate }}</td>
            <td>
                <ul>
                    {% for name in tablelist %}
                    <li>{{ name.Actor.Name }}</li>
                    {% endfor %}
                </ul>
            </td>
        </tr>
        {% endfor %}
    </table>

** Я получил этот вывод, может ли кто-нибудь подсказать мне, как отфильтровать эти данные только по id фильма, я бы хотел, чтобы кто-нибудь пришел и помог мне решить эту проблему. [это вывод, который я получаю, но я хочу отфильтровать имена актеров по movielist.id][1]

)
  [1]: https://i.stack.imgur.com/BlAuP.png**

Вы выбираете все объекты в ActorInMovie в tablelist, а не только связанные. Вам совсем не нужен tablelist. Вместо этого:

        {% for data in MovieName %}
        <tr>
            <td>{{ data.Title }}</td>
            <td>{{ data.ReleaseDate }}</td>
            <td>
                <ul>
                    {% for movie_actor in data.ActorInMovie %}
                    <li>{{ movie_actor.Actor.Name }}</li>
                    {% endfor %}
                </ul>
            </td>
        </tr>
        {% endfor %}

Вам также может понадобиться использовать related_name в вашей модели ActorInMovie, чтобы сообщить django, как вы будете определять связанные поля:

Movie = models.ForeignKey(Movielist, default=1, on_delete=models.CASCADE, blank=True, related_name='ActorInMovie)

Поскольку вы собираетесь выводить всех актеров каждого фильма, хорошей идеей будет использовать prefetch_related(Another ref) для достижения лучшей производительности, но это не обязательно, если у вас нет большого количества данных.

Вернуться на верх