2 回答

TA貢獻1798條經(jīng)驗 獲得超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的數(shù)量UserProfile變大,這將需要相當(dāng)長的時間。它將為每個生成一個隨機數(shù)UserProfile,然后檢索數(shù)字最大的兩個,這可能并不理想。
我們可以使用一種更加偽隨機的方法,這種方法隨機性較低,但效率更高:
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)
這將起作用,因為當(dāng)然至少已經(jīng)有兩個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)

TA貢獻1803條經(jīng)驗 獲得超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]
添加回答
舉報