Добавление нескольких случайных объектов в поле 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.
Я буду очень рад любому вкладу в то, как это реализовать, и общим подсказкам о том, что я могу сделать по-другому.
Спасибо, будьте здоровы!