为什么我的 django id 字段获得用户字段的值?
why my django id field get the value of user field?
我是 django 的新手。
我想制作一个可以用 faker enter link description here 制作假数据的脚本
这是我的 model.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
这是我的假数据函数
fake_first_name 是 faker 生成的具有假名的变量,其他变量也是如此
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]
当我们必须 table 具有一对一关系时,我不知道这是否是创建对象的正确方法。
在这里 :
userprofile = UserProfile.objects.get_or_create(
user=fake_first_name,
我认为如果 user
等于用户模型的键,我的 table 模型之间的连接就可以了。
我收到这个错误:
ValueError:字段 'id' 需要一个数字但得到了 'Lisa'
您需要传递 user
作为 UserProfile
的 user
的值,而不是 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]
我是 django 的新手。 我想制作一个可以用 faker enter link description here 制作假数据的脚本 这是我的 model.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
这是我的假数据函数 fake_first_name 是 faker 生成的具有假名的变量,其他变量也是如此
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]
当我们必须 table 具有一对一关系时,我不知道这是否是创建对象的正确方法。
在这里 :
userprofile = UserProfile.objects.get_or_create(
user=fake_first_name,
我认为如果 user
等于用户模型的键,我的 table 模型之间的连接就可以了。
我收到这个错误: ValueError:字段 'id' 需要一个数字但得到了 'Lisa'
您需要传递 user
作为 UserProfile
的 user
的值,而不是 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]