首页 > 解决方案 > Django/Python 在一个 html 中使用了两个模型

问题描述

我创建了电影网站,使用Django,我有两个模型第一个是

class Movie(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name="URL")
    title_english = models.CharField(max_length=100)
    descritpion = models.TextField(max_length=1000)
    image = models.ImageField(upload_to="movies")
    category = models.CharField(choices=CATEGORY_CHOICES,max_length=10)
    language = models.CharField(choices=LANGUAGE_CHOICES,max_length=30)
    status = models.CharField(choices=STATUS_CHOICES,max_length=10)
    year_of_production = models.TextField(max_length=1000)
    view_count = models.IntegerField(default=0)

第二个是

class Series(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name="URL")
    title_english = models.CharField(max_length=100)
    descritpion = models.TextField(max_length=1000)
    image = models.ImageField(upload_to="movies")
    category = models.CharField(choices=CATEGORY_CHOICES,max_length=10)
    language = models.CharField(choices=LANGUAGE_CHOICES,max_length=30)
    status = models.CharField(choices=STATUS_CHOICES,max_length=10)
    year_of_production = models.TextField(max_length=1000)
    view_count = models.IntegerField(default=0)

view.py

def home(request):
    user = request.user
    # Movies_obj = models.Movie.objects.all().order_by('-id')[:10]
    Movies_obj = models.Movie.objects.filter(category__in=['A']).order_by('-id')[:10]
    Movies_main_slider = models.Movie.objects.filter(category__in=["M"]).order_by('-id')[:10]
    Movies_main_suggest = models.Movie.objects.filter(status__in=["Suggest"]).order_by('-id')[:10]
    serial_obj = Serial
    seriali = models.Serial.objects.all().order_by('-id')[:10]
    return render(request,'index.html',{'user':user,'movies':Movies_obj,"main_slider":Movies_main_slider,
                                        "favorite":Movies_main_suggest,"serils":seriali})



def details(request,post_slug):
    movies_obj = Movies
    get_movie = Movies.objects.filter(slug = post_slug)
    return render(request,'Movie/movie_details.html',{"movies":get_movie})

也有两个HTML文件,index.html并且movie_details.html,但是当我添加新的Series不工作时movies_details.htmlmovies_details我正在使用

{% for i in movies %}
 {{ i.descritpion }}                                              
    {% endfor %}

当我添加系列不工作时,只有电影模型工作,在一个 html 中使用两个模型的最佳方法是什么?为系列模型创建了新的 html ?

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


您的网站仅显示电影,因为您只需在其中添加电影views.py即可解决您需要进行这些更改的问题:

  1. 将系列添加到您的views.py并将它们呈现到模板
def home(request):
    user = request.user
    # Movies_obj = models.Movie.objects.all().order_by('-id')[:10]
    Movies_obj = models.Movie.objects.filter(category__in=['A']).order_by('-id')[:10]
    Movies_main_slider = models.Movie.objects.filter(category__in=["M"]).order_by('-id')[:10]
    Movies_main_suggest = models.Movie.objects.filter(status__in=["Suggest"]).order_by('-id')[:10]
    serial_obj = Serial
    seriali = models.Serial.objects.all().order_by('-id')[:10]

    # add series here
    Series_obj = models.Series.objects.all()

    return render(request,'index.html',{'user':user,'movies':Movies_obj,"main_slider":Movies_main_slider,
                                        "favorite":Movies_main_suggest,"serils":seriali,"series": Series_obj})

  1. 现在您可以通过将此代码添加到您的index.html
{% for serie in Series_obj %}
    {{ serie.title }}
{% endfor %}
  1. 好的,现在对于详细信息页面,我建议您添加不同的功能,一个用于电影详细信息,另一个用于系列详细信息,同样的内容用于 .html 文件(例如:movie_details.html 和 serie_details.html),因此这些功能应如下所示:
def movieDetails(request,post_slug):
    get_movie = Movie.objects.filter(slug = post_slug)
    return render(request,'Movie/movie_details.html',{"movie":movie})

def serieDetails(request,post_slug):
    get_serie = Series.objects.filter(slug = post_slug)
    return render(request,'Movie/serie_details.html',{"serie":serie})
  1. 现在您可以movie_details.html像这样显示电影信息:
{{movie.title}}
{{movie.description}}

和同样的serie_details.html

{{serie.title}}
{{serie.description}}

不要忘记添加movieDetails并检查serieDetailsurls.py 的代码您犯了一些错误您将电影类命名为Movie然后您将其调用views.pyMovies检查这样的错误并告诉您这是否适合您


推荐阅读