Найти - Пользователи
Полная версия: проблема с foreign key
Начало » Django » проблема с foreign key
1
zlodiak
ребят, я погибаю. помогите пожалуйста

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

помогите пожалуйста реализовать смену статуса через выпадающий список
fongostev
Зачем отдельно писать
status = forms.ModelChoiceField(queryset=UserStatus.objects.all(), label= 'status', widget=forms.Select())
?
Это лишнее, в ModelForm ForeignKey корректно обрабатывается.
zlodiak
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. вот скрин
FishHook
zlodiak,
В БД таблицы менял руками? С sqlite есть известная проблема: если руками через гуёвину поправить что-то в таблице, то слетает AUTOINCREMENT у id. Если база пустая, то проще пересоздать.
zlodiak
FishHook
zlodiak,В БД таблицы менял руками? С sqlite есть известная проблема: если руками через гуёвину поправить что-то в таблице, то слетает AUTOINCREMENT у id. Если база пустая, то проще пересоздать.
да руками. пересоздать не проблема, но как ещё можно заполнить таблицу? только руками…
FishHook
zlodiak
можно заполнить таблицу
Я не говорил про заполнять, я говорил про изменение схемы.
zlodiak
FishHook
Я не говорил про заполнять, я говорил про изменение схемы.
БД пересоздал полностью. та же самая ошибка
FishHook
Хм.
UserProfile.objects.get_or_create(user = u)
В Этом месте Вы пытаетесь получить профиль пользователя или его создать. При создании Вы передаете только пользователя user = u, на что Вам логично отвечают, что для создания профиля этого недостаточно, нужен еще статус, т.к. он в Вашей модели - обязательное поле.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB