Попытка получить две случайные выборки с одинаковым значением внешнего ключа

программист-нуби здесь. Я работаю над приложением на 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, оттуда вы можете выбрать случайные VillagerFirstNames и VillagerLastNames. Например:

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('?') делает набор запросов случайным.

Update

Чтобы передать значения в шаблон, вы можете попробовать следующим образом:

context["foreign_first"] = race.villagerfirstname_set.order_by('?')[:5]
context["foreign_last"] = race.villagerlastname_set.order_by('?')[:5]
Вернуться на верх