为了账号安全,请及时绑定邮箱和手机立即绑定

在Django中,我们如何从数据库中随机获取两个以上的用户?

在Django中,我们如何从数据库中随机获取两个以上的用户?

回首忆惘然 2023-10-26 14:28:48
好吧,我正在使用信号创建每个新用户的个人资料,并且我尝试在新用户个人资料中添加一些默认关注者。我正在尝试使用以下代码,这实际上做得很好,但不完全是我希望做的事情。好用下面的代码。pk=1,pk=2 的前 2 位用户将成为每个新个人资料的默认关注者。我希望我可以给一些随机用户作为每个新用户的关注者。例如:第一个用户创建新帐户并默认获得两个用户关注 pk=1 , pk=2 第二个用户创建新帐户并默认获得两个用户关注不同的主键,例如 pk=2 , pk = 4。代码:使用以下代码,每个新用户都会获得相同的两个 2 个用户,pk=1,pk=2,我不希望这样。如何做我已经用例子解释过的事情。请帮助,因为我在这种情况下需要。我将非常感谢你。如果需要更多细节或代码,请告诉我。我将与您分享。def create_profile(sender, created,instance,**kwargs):     if created:         userprofile = UserProfile.objects.create(user=instance)         default_user_profile = UserProfile.objects.get_or_create(user__pk=1)[0]         default_user_profile.follower.add(instance)         userprofile.follower.add(default_user_profile.user)         userprofile.follower.add(2)
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我们可以UserProfile通过以下方式获得两个随机对象:


UserProfile.objects.order_by('?')[:2]

所以我们可以添加这些


def create_profile(sender, created,instance,**kwargs):

    if created:

        following = list(UserProfile.objects.order_by('?')[:2])

        userprofile = UserProfile.objects.create(user=instance)

        userprofile.follower.add(*following)

但如果s的数量UserProfile变大,这将需要相当长的时间。它将为每个生成一个随机数UserProfile,然后检索数字最大的两个,这可能并不理想。


我们可以使用一种更加伪随机的方法,这种方法随机性较低,但效率更高:


from random import sample


def create_profile(sender, created,instance,**kwargs):

    if created:

        pk_range = UserProfile.objects.count()

        k1, k2 = sample(range(pk_range), 2)

        f1 = UserProfile.objects.all()[k1]

        f2 = UserProfile.objects.all()[k2]

        userprofile = UserProfile.objects.create(user=instance)

        userprofile.follower.add(f1.user_id, f2.user_id)

这将起作用,因为当然至少已经有两个UserProfiles。因此我们可以通过以下方式防范还没有两个UserProfiles 的情况:


from random import sample


def create_profile(sender, created,instance,**kwargs):

    if created:

        pk_range = UserProfile.objects.count()

        if pk_range > 1:

            k1, k2 = sample(range(pk_range), 2)

            f1 = UserProfile.objects.all()[k1]

            f2 = UserProfile.objects.all()[k2]

            userprofile = UserProfile.objects.create(user=instance)

            userprofile.follower.add(f1.user_id, f2.user_id)


查看完整回答
反对 回复 2023-10-26
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

import random


users_scope = User.objects.all().exclude(pk=my_user_pk)


user_count = users_scope.count()

user_index_1, user_index_2 = random.sample(range(user_count - 1), 2)


follower1 = users_scope[user_index_1]

follower2 = users_scope[user_index_2]


查看完整回答
反对 回复 2023-10-26
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信