Как сохранить с пустым идентификатором пользователя в представлении Django? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть представление Django, которое должно сохранить CalendarEvent (экземпляр модели) с тремя установленными полями, включая объект профиля текущего пользователя. Представления защищены @login_required, и я вошел в систему как суперпользователь, затем вызвал представление, получая ошибку:

    /Users/jonathan/pim/../pim/pim_calendar/views.py in save_calendar
            date_padding = ''
        regexp = weekday + ' ' + month + ' ' + date_padding + date + \
          ' ..:..:.. ... ' + year
        event = pim_calendar.models.CalendarEvent()
        event.when = regexp
        event.description = description
        event.user = request.user.get_profile()
        event.save() 

в трассировке. (request.user должен быть зарегистрирован как суперпользователь.)

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

IntegrityError at /save_calendar
pim_calendar_calendarevent.userprofile_id may not be NULL
Request Method: POST
Request URL:    http://localhost:8000/save_calendar
Django Version: 1.3.1
Exception Type: IntegrityError
Exception Value:    
pim_calendar_calendarevent.userprofile_id may not be NULL
Exception Location: /usr/local/Cellar/python/2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 234
Python Executable:  /usr/local/bin/python
Python Version: 2.7.0
Python Path:    
['/Users/jonathan/pim',
 '/usr/local/Cellar/python/2.7/lib/python2.7/site-packages/distribute-0.6.14-py2.7.egg',
 '/usr/local/Cellar/python/2.7/lib/python2.7/site-packages/pip-0.8.1-py2.7.egg',
 '/usr/local/Cellar/python/2.7/lib/python27.zip',
 '/usr/local/Cellar/python/2.7/lib/python2.7',
 '/usr/local/Cellar/python/2.7/lib/python2.7/plat-darwin',
 '/usr/local/Cellar/python/2.7/lib/python2.7/plat-mac',
 '/usr/local/Cellar/python/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/usr/local/Cellar/python/2.7/lib/python2.7/lib-tk',
 '/usr/local/Cellar/python/2.7/lib/python2.7/lib-old',
 '/usr/local/Cellar/python/2.7/lib/python2.7/lib-dynload',
 '/usr/local/Cellar/python/2.7/lib/python2.7/site-packages',
 '/usr/local/Cellar/python/2.7/lib/python2.7/site-packages/PIL',
 '/usr/local/lib/python2.7/site-packages',
 '/usr/local/Cellar/python/2.7/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
Server time:    Thu, 16 Feb 2012 15:00:21 -0600

Если я добавлю, перед вызовом event.save (),

        print repr(event.user)

консоль отображает "" "" "" до сбоя в IntegrityError.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Из сообщения об ошибке это выглядит вместо:

    event.user = request.user.get_profile()

Вы должны вызывать это:

    event.userprofile = request.user.get_profile()
0 голосов
/ 17 февраля 2012

В дополнение к тому, что сказал @jkbr, вы можете подумать о том, чтобы не сохранять ссылку UserProfile в объекте CalendarEvent.Вместо этого просто сохраните пользователя, связанного с CalendarEvent, а затем получите доступ к профилю пользователя:

# Save event
event = pim_calendar.models.CalendarEvent()
event.user = request.user
event.user.save()

# Access the profile
event = CalendarEvent.objects.get(...)
the_userprofile = event.user.get_profile()
...