Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 20, 2014 18:52:15

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проблема с foreign key

ребят, я погибаю. помогите пожалуйста

на сайте сделал систему регистрации. каждый зарегистрированный пользователь имеет доступ к своему профилю, в котором может менять анкетную информацию. в том числе устанавливать статус из набора имеющихся статусов. набор статусов хранится в модели:

class UserStatus(models.Model):
	status = models.CharField(max_length=30)

вот модель для профиля пользователя:
class UserProfile(models.Model):
	user = models.OneToOneField(User)
	family = models.CharField(max_length=30, blank=True)
	name = models.CharField(max_length=30, blank=True)
	nation = models.CharField(max_length=30)
	status = models.ForeignKey(UserStatus)
	avatar = models.ImageField(upload_to='userprofile/', blank=True)
	nation_show = models.BooleanField(default=True, blank=True)	
	
User.profile = property(lambda u: UserProfile.objects.get_or_create(user = u)[0])

вот форма, которая отображается на странице профиля:
class UserProfileForm(forms.ModelForm):
	status = forms.ModelChoiceField(queryset=UserStatus.objects.all(), label= 'status', widget=forms.Select())
	
	class Meta:
		model = UserProfile
		fields = ('family', 'name', 'nation', 'status', 'nation_show', 'avatar')

по моему плану пользователь должен заходить на страницу своего профиля и выбирать статус из выпадающего списка. но проблема в том, что при загрузке страницы профиля на экран выводится следующее сообщение об ошибке:
IntegrityError at /userprofile/
userprofile_userprofile.status_id may not be NULL
Request Method: GET
Request URL: http://127.0.0.1:8000/userprofile/
Django Version: 1.6.2
Exception Type: IntegrityError
Exception Value:
userprofile_userprofile.status_id may not be NULL
Exception Location: C:\Python33\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 450
Python Executable: C:\Python33\python.exe
Python Version: 3.3.3

c:\Python33\django_projects\mutants\userprofile\views.py in user_profile
profile = user.profile …
▶ Local vars
C:\Python33\lib\site-packages\django\utils\functional.py in inner
return func(self._wrapped, *args) …
▶ Local vars
c:\Python33\django_projects\mutants\userprofile\models.py in <lambda>
User.profile = property(lambda u: UserProfile.objects.get_or_create(user = u)) …
▶ Local vars

помогите пожалуйста реализовать смену статуса через выпадающий список

Отредактировано zlodiak (Апрель 20, 2014 19:01:36)

Офлайн

#2 Апрель 20, 2014 21:55:44

fongostev
От: Moskau
Зарегистрирован: 2012-04-03
Сообщения: 62
Репутация: +  4  -
Профиль   Отправить e-mail  

проблема с foreign key

Зачем отдельно писать

status = forms.ModelChoiceField(queryset=UserStatus.objects.all(), label= 'status', widget=forms.Select())
?
Это лишнее, в ModelForm ForeignKey корректно обрабатывается.

Офлайн

#3 Апрель 21, 2014 08:52:21

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проблема с foreign key

fongostev
Зачем отдельно писать
всё равно не работает. теперь ошибка такая:
IntegrityError at /userprofile/
userprofile_userprofile.status_id may not be NULL
Request Method: GET
Request URL: http://127.0.0.1:8000/userprofile/
Django Version: 1.6.2
Exception Type: IntegrityError
Exception Value:
userprofile_userprofile.status_id may not be NULL
Exception Location: C:\Python33\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 450
Python Executable: C:\Python33\python.exe

при этом userprofile_userprofile.status_id may у меня не null. вот скрин

Офлайн

#4 Апрель 21, 2014 09:20:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

проблема с foreign key

zlodiak,
В БД таблицы менял руками? С sqlite есть известная проблема: если руками через гуёвину поправить что-то в таблице, то слетает AUTOINCREMENT у id. Если база пустая, то проще пересоздать.



Офлайн

#5 Апрель 21, 2014 09:37:02

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проблема с foreign key

FishHook
zlodiak,В БД таблицы менял руками? С sqlite есть известная проблема: если руками через гуёвину поправить что-то в таблице, то слетает AUTOINCREMENT у id. Если база пустая, то проще пересоздать.
да руками. пересоздать не проблема, но как ещё можно заполнить таблицу? только руками…

Офлайн

#6 Апрель 21, 2014 09:43:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

проблема с foreign key

zlodiak
можно заполнить таблицу
Я не говорил про заполнять, я говорил про изменение схемы.



Офлайн

#7 Апрель 21, 2014 17:52:53

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проблема с foreign key

FishHook
Я не говорил про заполнять, я говорил про изменение схемы.
БД пересоздал полностью. та же самая ошибка

Офлайн

#8 Апрель 22, 2014 06:00:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

проблема с foreign key

Хм.

UserProfile.objects.get_or_create(user = u)
В Этом месте Вы пытаетесь получить профиль пользователя или его создать. При создании Вы передаете только пользователя user = u, на что Вам логично отвечают, что для создания профиля этого недостаточно, нужен еще статус, т.к. он в Вашей модели - обязательное поле.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version