亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號