django 1.3 UserProfile, соответствующий запрос не существует - PullRequest
5 голосов
/ 29 марта 2011

У меня небольшая проблема с моделью пользователя, модель выглядит так:

#! -*- coding: utf-8 -*-

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
      url = models.URLField(max_length = 70, blank = True, verbose_name = 'WWW')
      home_address = models.TextField(blank = True, verbose_name = 'Home Adress')
      user = models.ForeignKey(User, blank = True, unique = True)

      def __unicode__(self):
          return '%s' %(self.user)

Когда я открываю django-shell и сначала импортирую пользователя:

u = User.objects.get(id = 1)

и затем:

zm = UserProfile.objects.get(user = u)

Я получаю ошибку:

DoesNotExist: запрос соответствия UserProfile не существует.

Идея проста: сначала я создаю пользователя, он работает, затем я хочу добавить некоторую информацию пользователю, он не работает: /

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Вы уверены, что объект UserProfile для этого пользователя существует?Django не создает его автоматически для вас.

Что вам, вероятно, нужно, это:

u = User.objects.get(id=1)
zm, created = UserProfile.objects.get_or_create(user = u)

Если вы уверены, что профиль существует (и вы правильно установили AUTH_PROFILE_MODULE),модель User уже имеет вспомогательный метод для обработки этого:

u = User.objects.get(id=1)
zm = u.get_profile()
3 голосов
/ 29 марта 2011

Как обсуждено в документации , Django не создает автоматически объекты профиля для вас. Это ваша ответственность. Обычный способ сделать это - подключить обработчик сигнала после сохранения к модели User, а затем создавать профиль при создании нового пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...