gpt4 book ai didi

python - 在 Django 中自动更新个人资料图片

转载 作者:行者123 更新时间:2023-12-04 08:44:54 26 4
gpt4 key购买 nike

我编写了一个命令,它读取一个 csv 文件并一次创建 50 多个用户。另外,我已经下载了一堆我打算随机分配给每个用户的头像。这就是问题发生的地方。我编写了下面的代码,它为每个用户分配一个随机图像作为默认图像。
模型.py

def random_image():
directory = os.path.join(settings.BASE_DIR, 'media')
files = os.listdir(directory)
images = [file for file in files if os.path.isfile(os.path.join(directory, file))]
rand = choice(images)
return rand


class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatars', default=random_image)

def save(self, *args, **kwargs):
# check model is new and avatar is empty
if self.pk is None and self.avatar is not None:
self.avatar = random_image
super(UserProfile, self).save(*args, **kwargs)
但是,代码似乎仅在用户上传不是我想要的图片时才运行。我想要的是一旦用户登录它,模型应该检查它是否有头像,如果没有,则分配一个随机图像。所以,我的问题是:
  • 我该如何实现?
  • 因为每次登录后系统都会检查这个,所以在我看来它有点低效。要取代这种策略,什么是更好的选择?

  • **编辑:
    项目名称/管理/命令/CreateUsers.py
    class Command(BaseCommand):
    help = 'Creates bulk users given a csv file.'

    def handle(self, *args, **options):

    ## Get the Groups
    TopManagement = Group.objects.get(name='TopManagement')
    Finance = Group.objects.get(name='Finance')

    ## Read the csv file
    with open(os.path.join(settings.FILES_DIR,'bulkusers.csv'), newline='') as csvfile:
    ausers = csv.reader(csvfile, delimiter = ',')
    next(ausers, None) # skip the headers

    print('Creating Users...')

    # Create users
    for row in ausers:
    newuser = User.objects.create_user(
    username = row[0],
    password = row[1],
    email = row[2],
    is_superuser = 0,
    is_staff = 0,
    is_active = 1,
    date_joined = datetime.datetime.now(tz=timezone.utc)
    )

    # Assign user to group
    if row[3] == 'TopManagement':
    TopManagement.user_set.add(newuser)
    newuser.groups.add(TopManagement)
    elif row[3] == 'Finance':
    newuser.groups.add(Finance)

    print('Users created successfully!')

    最佳答案

    在我看来,您的 save()覆盖应该有效,即它会在用户创建时设置一个随机头像。只需在脚本中使用 Django ORM,即使用 User 创建用户脚本中的模型,以便它调用 save方法。
    我认为你的条件不正确,我相信你应该检查头像是 None :

    if self.pk is None and self.avatar is None:
    self.avatar = random_image()

    关于python - 在 Django 中自动更新个人资料图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64370758/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com