#python #django #django-models #django-orm #django-migrations
#python #django #django-модели #django-orm #django-миграции
Вопрос:
Я в основном новичок в Django и получил такую ошибку ValueError. У меня есть базовая модель пользователя, наследуемая от класса AbstractUser. Также у меня есть модель профиля (в отдельном приложении), которая также содержит OneToOneField, относящееся к моей пользовательской модели.
Прежде всего, давайте посмотрим на мою модель профиля:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
country = models.ForeignKey('Country', on_delete=models.SET_DEFAULT, default='-')
full_name = models.CharField(max_length=32, default='-')
about = models.TextField(max_length=1000, default="User don't set any information about")
register_date = models.DateField(auto_now=True)
image = models.ImageField(upload_to='images/', default='images/no_avatar.png')
active = models.BooleanField(default=False)
website = models.URLField(default='-')
github = models.URLField(default='-')
twitter = models.URLField(default='-')
instagram = models.URLField(default='-')
facebook = models.URLField(default='-')
Во-вторых, когда я создаю нового пользователя, я должен также создать его собственный профиль (экземпляр модели, ссылающийся на экземпляр пользователя).
Давайте посмотрим на мой view.py где я создаю нового пользователя.
class SignupView(View):
def get(self, request):
"""
:param request:
:return: Register page
"""
return render(request, "login/register.html", {
'form': SignupForm()
})
def post(self, request):
"""
Tests data validity,creating user if everything is ok.
:param request:
:return: Particular user page if data is valid, otherwise it will return couple of mistake messages
"""
form = SignupForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password1 = form.cleaned_data['password']
password2 = form.cleaned_data['confirm_password']
if password1 == password2:
try:
user = User.objects.create_user(username=username, email=email, password=password1)
profile = Profile.objects.create(user=user)
user.save()
profile.save()
return HttpResponseRedirect(reverse('myprofile:index', args=(user.id, )))
except IntegrityError:
return render(request, 'login/register.html', {
'message': 'Username is already taken',
'form': form
})
else:
return render(request, 'login/register.html', {
'message': 'Passwords must match',
'form': form
})
return render(request, 'login/register.html', {
'form': form
})
Я оставил представление на основе всего класса, но вам, вероятно, нужно проверить функцию post.
И вот тут-то и начинается проблема.
Я получаю сообщение об ошибке в строке «profile = Profile.objects.create (user = user)». В этот момент Django останавливает выполнение и выдает ошибку ValueError с «Полем ‘id’ ожидал число, но получил ‘-‘. «.
Что я уже пробовал?
Удалите базу данных, а также удалите миграции с помощью «python3 manage.py перенести нулевое приложение — подделка», а затем повторно применить миграцию в новую базу данных.
Так что я, вероятно, не думаю, что это проблема с миграцией (не уверен).
Но что я пропустил?
Я буду очень благодарен за любую помощь.
Комментарии:
1. Вам нужно использовать число по умолчанию. Еще раз проверьте внешний ключ страны.
2. Большое спасибо за помощь, проблема решена