我有多个模型:
class Game(models.Model):
name = models.CharField('Nom du jeu', max_length=100)
logo = models.ImageField('Logo', blank=True, upload_to='game_logos')
class League(models.Model):
game = models.ForeignKey(Game, verbose_name='Jeu', null=True, on_delete=models.SET_NULL)
league = models.CharField('Ligue', max_length=20)
hexcolor = models.CharField('Code couleur Hex', max_length=7, blank=True, default='#000000')
class Event(models.Model):
game = models.ForeignKey(Game, verbose_name='Nom du jeu', null=True, on_delete=models.SET_NULL)
event_type = models.CharField(verbose_name="Type d'événement", max_length=50, choices=type_course)
league = models.ForeignKey(League, verbose_name='Ligue', null=True, on_delete=models.SET_NULL)
circuit = models.ForeignKey(Circuit, verbose_name='Circuit', null=True, on_delete=models.SET_NULL)
event_date = models.DateTimeField(verbose_name="Date de la course")
这里的逻辑是,我们有比赛,发生在某场比赛,在某个联赛。事情是,我可以有不同的游戏,有自己的联赛,独立于其他比赛的联赛(一级方程式将有联赛A,B和C,另一场比赛将有联赛1,2和3)。
所以当我设置一个新的事件时,只要我选择了游戏,我就想得到与这个游戏相关联的联赛,而不是所有的联赛。我如何根据游戏输入来过滤联赛的选择呢?
2条答案
按热度按时间xam8gpfp1#
用户选择游戏,然后被重定向到一个新的页面,在那里他可以选择联赛和事件。
related_name
,而不是使用league_set
,例如,您可以将其命名为game_leagues
。因此,调用leagues = game.game_leagues.all()
将得到相同的结果。*如果用户在一个页面中选择了游戏、联赛和赛事,您必须a)将所有联赛和赛事传递给视图,并使用javascript根据所选游戏过滤联赛和赛事,或者b)您可以使用django rest框架在选择游戏后从REST API获取所有联赛和赛事。
选项a)非常简单,需要的代码较少,但如果你有很多联赛和赛事,它的性能可能会不足。那么选项b)是首选。
7tofc5zh2#
这取决于你是使用Django模板还是使用带有独立前端的Django Rest框架。我假设你使用的是Django模板。
简介
因此,Django应用运行在服务器端,这意味着你的python代码不会在浏览器中执行,也就是说,每当你想向用户显示新数据时,浏览器必须向服务器发送请求,服务器从数据库中获取数据并将其发送回用户的浏览器,这需要刷新页面。而且我们知道当你刷新页面时,任何状态(iidoEe.输入字段值)都会丢失。那么如何绕过这个问题呢?
URL参数
当你需要刷新页面同时保持状态时,最简单的方法就是把信息存储在你的URL中,除非信息被明显地保留,因为每个人都可以看到URL。
下面我将为您输入一个表单示例,其中包含两个
select
输入,第二个输入依赖于第一个输入。为了使其工作,您必须在后端捕获URL参数,并通过上下文变量将它们传递到前端。