猿问

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

好吧,我正在使用信号创建每个新用户的个人资料,并且我尝试在新用户个人资料中添加一些默认关注者。我正在尝试使用以下代码,这实际上做得很好,但不完全是我希望做的事情。好用下面的代码。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)


回首忆惘然
浏览 142回答 2
2回答

元芳怎么了

我们可以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 sampledef 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 sampledef 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)

繁星点点滴滴

import randomusers_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]
随时随地看视频慕课网APP

相关分类

Python
我要回答