我必须在不使用Manytomany字段的情况下在电影和演员之间建立关系

发布于 2025-01-23 07:16:59 字数 2036 浏览 3 评论 0原文

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 [这是我得到的输出

  [1]: https://i.sstatic.net/BlAuP.png**
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>

**i have getting this out put can any any one tell me how to filter this data only my movie id i would like if someone come and help me in solving this problem
[this is the output what i am getting but i want filter actors name by movielist.id][1]

  [1]: https://i.sstatic.net/BlAuP.png**

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无法言说的痛 2025-01-30 07:16:59

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

您可能还需要在actorinmovie模型中使用RESSIC_NAME来告诉Django如何识别相关字段:

Movie = moderion.foreignkey.foreignkey(Movielist,Movielist, default = 1,on_delete = models.cascade,blamn = true,rection_name ='actorinmovie),

因为您将打印每部电影的所有演员,所以使用 prefetch_reelated 另一个参考资料,以实现更好的性能,但是如果您不需要,则不需要t有很多数据。

You are selecting all the objects in ActorInMovie into tablelist, and not just the related ones. You don't need the tablelist at all. Instead:

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

You might also need to use related_name in your ActorInMovie model to tell django how you'll identify the related fields:

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

Since you're going to print all the actors of every movie, it's a good idea to use prefetch_related(Another ref) to achieve better performance, but it's not required if you don't have a lot of data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文