Django listview仅显示id,而模板中没有其他字段

时间:2018-02-07 19:50:08

标签: django listview django-models django-templates django-views

我是Django的新手。我添加了一个数据库,我根据从电影数据库中获取的数据创建了我的Django项目。我正在使用Django的generic.ListView来显示它的字段。但是,只有每部电影的id显示。

模板:

<body>

The movies include: <br/>

{% for movie in movies_list %}
    {{ movie.id }} {{ movie.title }} <br/>
    {{ movie.original_language }} <br/>
    {{ movie.overview }}
{% endfor %}

</body>

尽管代码中有movie.titlemovie.original_languagemovie.overview,但django-debug-toolbar在我加载页面时只显示了一个查询:SELECT "movies"."id" FROM "movies"。< / p>

apps目录中的models.py:

from django.db import models

class Movies(models.Model):
    class Meta:
    app_label = "myapp"
    db_table = "movies"
    managed = False

app目录中的views.py:

from django.views import generic
from .models import Movies

class MoviesListView(generic.ListView):
    model = Movies
    template_name = r'myproject/theme/templates/myapp/myapp.html'

我尝试将以下内容添加到上面的class MoviesListView(generic.ListView),但它只是将movie.id的SQL查询加倍:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['movies_list'] = Movies.objects.all()
    return context

urls.py与settings.py:

位于同一目录中
from django.contrib import admin
from django.urls import path
from django.conf import settings

from myapp import views as myapp_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', myapp_views.MoviesListView.as_view(), name='movie_list'),
]

以下是我如何根据json文件中的数据创建表格,唯一的补充是id,但没有提供:

create_table_movie = """CREATE TABLE movies (
    id INTEGER PRIMARY KEY,
    adult TEXT,
    original_language TEXT,
    original_title TEXT,
    title TEXT,
    overview TEXT,
    release_date DATE,
    genres TEXT,
    production_countries TEXT,
    videos TEXT,
    images TEXT
    );"""

没有报告任何错误。我错过了什么?

2 个答案:

答案 0 :(得分:1)

定义模型中您在sql视图中提到的所有字段。

class Movies(models.Model):
    id = models.AutoField(primary_key=True)
    adult = models.TextField()
    original_language = models.TextField()
    original_title = models.TextField()
    title = models.TextField()
    overview = models.TextField()
    release_date = models.DateField()
    genres = models.TextField()
    production_countries = models.TextField()
    videos = models.TextField()
    images = models.TextField()

    class Meta:
        app_label = "myapp"
        db_table = "movies"
        managed = False 

答案 1 :(得分:0)

您的模型中没有任何字段,因此Django不了解数据库中的任何列。每列需要一个字段。

由于这是您自己创建的表格,因此我不明白您为何通过SQL手动完成此操作。您应该首先在Django中创建模型,然后让Django通过迁移来管理表。