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)
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]
添加回答
举报