почему мое django поле id получает значение поля пользователя? - PullRequest
1 голос
/ 12 апреля 2020

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

class UserProfile(models.Model):

user = models.OneToOneField(User, on_delete=models.CASCADE)

#additional
blood_type = models.CharField(max_length=2,blank=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True)
description = models.TextField(blank=True)
case =models.CharField(max_length=30,blank=True)
def __str__(self):
    return self.user.username

это моя функция с поддельными данными фальшивое имя, которое сгенерировал фейкер, и так далее для других переменных

    def populate(N=5):
    for entery in range(N):
        #making fake data
        fake_first_name = fakergen.first_name()
        fake_last_name = fakergen.last_name()
        fake_email = fakergen.email()
        fake_password = fakergen.password(length=10)
        fake_blood_type = random.choice(bloodType)
        fake_phone = fakergen.phone_number()
        fake_case = random.choice(Case)
    Create new User entery
    user = User.objects.get_or_create(
        username=fake_first_name, 
        first_name=fake_first_name, 
        last_name=fake_last_name, 
        email=fake_email)[0]
    tempUser = User.objects.get(username=fake_first_name)
    tempUser.set_password(fake_password)
    tempUser.save()
    userprofile = UserProfile.objects.get_or_create(
        user=fake_first_name,
        blood_type=fake_blood_type, 
        phone_number=fake_phone,  
        case=fake_case,
        description='')[0]

Я не знаю, является ли это правильным способом создания объекта, когда нам нужно составить таблицу с отношением один к одному. здесь: userprofile = UserProfile.objects.get_or_create( user=fake_first_name, Я думаю, что если бы user было бы равно ключу для модели User, связь между моей моделью таблицы была бы в порядке.

и я получаю эту ошибку: ValueError: Поле 'id' ожидало число, но получило 'Lisa'

1 Ответ

2 голосов
/ 12 апреля 2020

Вам нужно передать user как значение для user вашего UserProfile, а не fake_first_name:

<b>user</b> = User.objects.get_or_create(
    username=fake_first_name, 
    first_name=fake_first_name, 
    last_name=fake_last_name, 
    email=fake_email)[0]
user.set_password(fake_password)
user.save()
userprofile = UserProfile.objects.get_or_create(
    <b>user=user</b>,
    blood_type=fake_blood_type, 
    phone_number=fake_phone,  
    case=fake_case,
    description='')[0]
...