Поле ‘id’ ожидало число, но получило ‘-‘

#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. Большое спасибо за помощь, проблема решена