Не удается прочитать свойство ‘title’ нулевой ошибки при использовании Vue с Django Rest Framework при LimitOffsetPagination

#django #vue.js #django-rest-framework

#django #vue.js #django-rest-framework

Вопрос:

В качестве теста на использование Vue для получения URL-адреса API Django Rest Framework, похоже, он работает нормально, и я получу список названия руководства и отображение идентификатора руководства в моих ссылках, как и ожидалось:

Мой HTML-файл:

 <li v-for="tutorial in tutorials">
    <a href="/tutorial/[[ tutorial.id ]]/">
        [[ tutorial.title | title ]]
    </a>
    at [[ tutorial.created ]] by [[ tutorial.author ]]
</li>

<script type="text/javascript">
    let app = new Vue({
        el: "#app",
        delimiters: ["[[", "]]"],
        data: {
            tutorials: {}
        },
        mounted() {
          axios.get('/api/tutorials/').then(response => {
            this.tutorials = response.data
          })
        }
    });
</script>
  

Что касается rest api для Django, сериализатор, используемый в Django, является:

 class TutorialSerializer(serializers.HyperlinkedModelSerializer):
author = serializers.StringRelatedField()
class Meta:
    model = Tutorial
    fields = [
        "title",
        "description",
        "summary",
        "author",
        "graphic",
        "created",
        "modified",
        "is_approved",
        "is_published",
        "publish_date",
    ]
  

Но когда я ввожу ограничение, подобное этому, в settings.py:

 REST_FRAMEWORK = {
    ...
    'DEFAULT_PAGINATION_CLASS': 
        'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 100,
}
  

Теперь я получаю это в консоли:

 TypeError: Cannot read property 'title' of null
at eval (eval at Ya (vue:6), <anonymous>:3:331)
at wn.vt [as _l] (vue:6)
at wn.eval (eval at Ya (vue:6), <anonymous>:3:177)
at wn.e._render (vue:6)
at wn.r (vue:6)
at fn.get (vue:6)
at fn.run (vue:6)
at un (vue:6)
at Array.<anonymous> (vue:6)
at qe (vue:6)
  

Кстати, использование администратора Django для просмотра Rest API работает нормально. Кто-нибудь когда-либо видел это раньше?

Ответ №1:

И это никогда не подводит, когда я трачу время на то, чтобы задать хороший вопрос, ответ появляется в течение минуты или двух после того, что нужно сделать.

Мне нужно было использовать:

 axios.get('/api/tutorials/').then(response => {
        this.tutorials = response.data.results
      })
  

Откуда я знал? Потому что я использовал curl (как и должен был изначально) и нашел фактические возвращаемые значения, когда добавил этот фильтр разбивки на страницы. :- В любом случае, я хочу сохранить это здесь на случай, если кто-то облажался, как я, и не исследовал должным образом. Я делаю это годами, и я все еще допускаю подобные ошибки. 🙂