Добавление нескольких случайных объектов в поле ManyToManyField на основе пользовательского ввода

Я новичок в Django и пытаюсь создать приложение для игры/викторины по географии.

На первом этапе игрок выбирает некоторые настройки игры (количество раундов, сложность, регион/область). Основываясь на данных пользователя, я хочу назначить ему страны.

<
class Country(models.Model):
    name = models.CharField(max_length=90)
    code = models.CharField(max_length=15)
    subcontinent = models.CharField(max_length=25)
    subcontinent_code = models.CharField(max_length=15)
    continent = models.CharField(max_length=25)
    continent_code = models.CharField(max_length=15)

    def __str__(self):
        return self.name

class Player(models.Model):
    name = models.CharField(max_length=90)
    number_rounds = models.IntegerField(default=10)
    difficulty = models.CharField(max_length=100, default='easy')
    area = models.CharField(max_length=100, default='world')
    countries = models.ManyToManyField(Country)

    def __str__(self):
        return self.name
<
class SetGameSettings(forms.ModelForm):

    class Meta:
        model = Player
        fields = ['name', 'number_rounds', 'difficulty', 'area']
        labels = {
            'name': 'Enter your username',
            'number_rounds': 'Number of rounds',
            'difficulty': 'Difficulty',
            'area': 'Area',
        }
        widgets = {
            'number_rounds': forms.NumberInput(attrs={'min': 1, 'max': 20}),
            'difficulty': forms.Select(choices=[('easy', 'Easy'), ('medium', 'Medium'), ('hard', 'Hard')]),
            'area': forms.Select(choices=[('World', 'World'), ('Africa', 'Africa'), ('Asia', 'Asia'), ('Europe', 'Europe'), ('Americas', 'Americas'), ('Oceania', 'Oceania')]),
        }
<
def home(request):
    if request.method == 'POST':
        form = SetGameSettings(request.POST)
        if form.is_valid():
            form.save()

            #direct to next url

    form = SetGameSettings()
    return render(request, 'geo/home.html', {'form': form})
<

Я попытался добавить метод в класс Player

def draw_countries(self):
    if self.area=='world':
        potential_countries = Country.objects.all().order_by('?')
    else:
        potential_countries = Country.objects.filter(continent=self.area).order_by('?')

    self.countries.add(*potential_countries[:self.number_rounds])

и затем вызвать этот метод в views.py. К сожалению, это не работает, и никакие страны не добавляются в Player.countries.

Я буду очень рад любому вкладу в то, как это реализовать, и общим подсказкам о том, что я могу сделать по-другому.

Спасибо, будьте здоровы!

Вернуться на верх