【问题标题】:why my django id field get the value of user field?为什么我的 django id 字段得到用户字段的值?
【发布时间】:2023-04-06 10:33:01
【问题描述】:

我是 django 新手。 我想制作一个可以用fakerenter 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]

当我们必须以一对一的关系进行表时,我不知道这是否是创建对象的正确方法。 在这里 : userprofile = UserProfile.objects.get_or_create( user=fake_first_name, 我认为如果user 等于用户模型的密钥,那么我的表模型之间的连接就可以了。

我得到这个错误: ValueError:字段 'id' 需要一个数字,但得到了 'Lisa'

【问题讨论】:

    标签: python django django-models faker


    【解决方案1】:

    您需要将user 作为UserProfileuser 的值传递,而不是fake_first_name

    user = 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(
        user=user,
        blood_type=fake_blood_type, 
        phone_number=fake_phone,  
        case=fake_case,
        description='')[0]

    【讨论】:

    • 在这种情况下我会收到此错误django.db.utils.IntegrityError: UNIQUE constraint failed: auth_user.username 我不知道这是否与之前的问题有关
    • @gazegan: 那是因为你在你的数据库中用 same username 创建了两个 Users,但是 username 应该是 unique.
    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 2011-08-19
    • 2017-08-21
    • 2021-01-22
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    相关资源
    最近更新 更多