试图使两个随机样本具有相同的匹配外键值



我正在制作一个django应用程序,它可以从以下模型中创建随机的幻想角色名称:

class VillagerFirstNames(models.Model):
first_name=models.CharField(max_length=30, unique=True)
race = models.ForeignKey(Race, on_delete=models.CASCADE)
def __str__(self):
return self.first_name
class VillagerLastNames(models.Model):
last_name = models.CharField(max_length=30, unique=True)
race = models.ForeignKey(Race, on_delete=models.CASCADE)
def __str__(self):
return self.last_name

我的问题是在我的观点。为了随机抽取。我必须将我的查询转换为列表,如下所示:

foreign_first = list(VillagerFirstNames.objects.all()
foreign_first_random = random.sample(foreign_first, 3)
context["foreign_first"] = foreign_first_random
foreign_last = list(VillagerLastNames.objects.filter(race__race=foreign_first_random.race))
context["foreign_last"] = random.sample(foreign_last, 3)

基本上,我希望提取的姓氏与第一个随机样本中提取的姓氏具有相同的种族。我很难弄清楚这一点,因为我在上面做的方法去掉了"种族"。属性来自foreign_first_random.

您可以在Race中进行随机选择,从那里您可以随机选择VillagerFirstNamesVillagerLastNames。例如:

race = Race.objects.all().order_by('?').first()
race_firstname = race.villagerfirstname_set.all().order_by('?').first()
race_lastname = race.villagerlastname_set.all().order_by('?').first()

这里order_by('?')使查询集随机。

更新要将值传递给模板,可以这样尝试:

context["foreign_first"] = race.villagerfirstname_set.order_by('?')[:5]
context["foreign_last"] = race.villagerlastname_set.order_by('?')[:5]

最新更新