Обратите внимание, что это не так просто, как можно подумать.Самый простой способ добиться этого - перестроить базу данных следующим образом:
class Choice(models.Model):
choice = models.CharField(max_length=300)
def __str__(self):
return self.choice
class User(models.Model):
username=models.CharField(max_length=300)
class SlotChoice(models.Model):
slotname=models.CharField(max_length=300)
choice = models.ForeignKey(Choice, related_name="adminchoices_related")
def __str__(self):
return self.slotname + " " +self.choice.choice
class UserChoice(models.Model):
user = models.ForeignKey(User)
choice = models.ForeignKey(SlotChoice)
Это просто, но немного отличается от того, что вы просили.Вы можете сделать это более удобным, настроив метод " str " модели SlotChoice, как показано выше.
Однако, если вы действительно хотите сделать эту работу более похожей на оригиналВопрос немного сложнее.Чтобы действительно что-то вроде этого работало гладко, вам нужно будет использовать JavaScript: ваша форма не знает, какой слот вы выбрали при загрузке, поэтому вам нужно изменить выпадающий список при изменении выпадающего слота.Один из аккуратных способов сделать это - модуль django-smart-selects .Это просто в использовании - также для начинающих - это волшебно добавляет JS.Тогда ваши модели будут выглядеть примерно так:
from smart_selects.db_fields import ChainedForeignKey
class Choice(models.Model):
choice = models.CharField(max_length=300)
def __str__(self):
return self.choice
class User(models.Model):
username=models.CharField(max_length=300)
class Slot(models.Model):
slotname=models.CharField(max_length=300)
class SlotChoice(models.Model):
slot=models.ForeignKey(Slot)
choices = models.ManytoManyFields(Choice, related_name="adminchoices_related")
class UserChoice(models.Model):
user = models.ForeignKey(User)
slot = models.ForeignKey(Slot)
choice = = ChainedForeignKey(
SlotChoice,
chained_field="slot",
chained_model_field="slot",
show_all=False,
auto_choose=True,
sort=True)