Ошибка NotNotExist в представлении / шаблоне django с полем один к одному - PullRequest
0 голосов
/ 04 октября 2011

У меня есть эти модели.

class Storypak(models.Model):
    headline = models.CharField('Headline', max_length=200)
    pub_date = models.DateField(blank=True)

class Story(models.Model):
    storypak = models.OneToOneField('Storypak', blank=True, null=True)
    copy = models.TextField(blank=True)

И это мнение.

def pak_detail(request, pak_id, year, month, day):
    pak = Storypak.objects.get(pk=pak_id)
    t = loader.get_template('storypak_detail.html')
    c = Context ({
        'pak' : pak,
        })
    return HttpResponse(t.render(c))

Когда я пытаюсь использовать оператор if в своем шаблоне, выдается ошибка DoesNotExist. Документация, которую я могу найти, указывает, что эти ошибки должны быть отключены. Разве if pak.story не должен разрешать False и не выдавать ошибку? Что мне не хватает? Я думаю, что это может иметь какое-то отношение к отношениям OneToOne, но я не могу найти ничего в документах, касающихся именно этого.

Вот соответствующий код шаблона, насколько я помню. У меня нет файла на этом компьютере. Я исправлю это позже, если это не правильно, и, возможно, опубликую отладочную информацию, если это поможет.

{% if pak.story %}
    <p>{{ pak.story.copy }}</p>
{% endif %}

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

вот связанная ошибка: https://code.djangoproject.com/ticket/10227

вот источник для тега if: https://code.djangoproject.com/browser/django/trunk/django/template/defaulttags.py#L267

Как видите, метод render тега не ловит ничего, кроме VariableDoesNotExist.

0 голосов
/ 04 октября 2011

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

pak = Storypak.objects.get(pk=pak_id)

Неверный pak_id, или ваша модель искажена, и Storypak с таким идентификатором не существует. Это единственный вызов объекта, который вызовет ошибку DoesNotExist. Вы можете проверить, что это действительный идентификатор, добавив raise Exception(str(pak_id)) перед этой строкой, чтобы увидеть, что он пытается «получить». Убедитесь, что запись существует в таблице storypak.

...