Тебе действительно нужно много-много:
class Bookmaker(models.Model):
name = models.CharField(max_length=50)
accepted_countries = models.ManyToMany('Country',related_name='accepted')
restricted_countries = models.ManyToMany('Country', related_name= 'restricted')
class Country(models.Model):
name = models.CharField(max_length=50)
bookmakers = models.ManyToMany(Bookmaker)
Тогда, если вы создадите форму для редактирования букмекера, вы сможете добавить имя, допустимые и запрещенные страны:
forms.py
class BookmakerForm(models.ModelForm):
class Meta:
model = Bookmaker
fields = ['name', 'accepted_countries', 'restricted_countries']
#for having a better default display you can change the widget:
self __init__(self, *args, **kwargs):
super(BookmakerForm, self).__init__(*args, **kwargs)
self.fields['accepted_countries'].widget = CheckboxSelectMultiple()
self.fields['restricted_countries'].widget = CheckboxSelectMultiple()
В представлении по умолчанию, если вам просто нужно проверить, если form.is_valid()
и сохранить. Модель django будет управлять промежуточным этапом для вас.
Поле букмекерских контор в Стране позволяет вам получить информацию обо всех букмекерских конторах, связанных с какой-либо страной, без необходимости регистрировать как принятые, так и ограниченные (это больше для удобства).
Но вам нужно будет добавить букмекера в этот список на вашем экране, например:
class CreateBookmakerView(CreateView):
model = Bookmaker
form_class = BookmakerForm
success_url = reverse_lazy('your success url name here')
def form_valid(self,form):
bookmaker = form.save()
bookmaker.country_set.add(bookmaker)
bookmaker.save()
return HttpResponseRedirect(self.get_success_url())