这是我的第一个Django项目,所以我还在学习。一级方程式赛车和赛车手的Django项目。Race模型看起来像这样,
class Race(models.Model):
name = models.CharField(max_length=250)
location = models.CharField(max_length=250)
date = models.DateField()
track = models.URLField()
comments = models.TextField()
@property
def has_passed(self):
return self.date < date.today()
class Meta:
ordering = ["date"]
def __str__(self):
return self.name
赛车手看起来是这样的
class Players(models.Model):
name = models.CharField(max_length=250)
country = models.CharField(max_length=250)
team = models.ForeignKey(
Teams,
related_name = "players_team",
on_delete = models.CASCADE
)
races = models.ManyToManyField(
Race,
related_name= "results",
)
class Meta:
ordering = ["name"]
def __str__(self):
return self.name
我希望能够为每场比赛分配不同的顺序,以显示比赛结果。如何分配此订单?谢谢你
我试图通过创建一个结果模型来手动分配排序,我觉得这很笨拙。
3条答案
按热度按时间t5zmwmid1#
最好的方法是为每个玩家种族创建一个结果模型,如下所示:
这样你就可以很容易地查询每一场比赛的结果,我建议你把类名从Players改为Player,你可以添加一个干净的方法,不允许每场比赛一次以上的订单。为关系添加一个额外的模型将使其更健壮,更易于使用。
tnkciper2#
我相信一个合适的解决方案是使用额外的字段将结果存储在
many-to-many
关系表中:models.py
请注意,
comments
现在是ManyToManyField
,因为在Model
中字段名称是复数,我假设您希望比赛有许多Comments
(由不同的用户创建)。下面是一个简单的
testing
示例:tests.py
1rhkuytd3#
Django实现了一个
ManyToManyField
,通过创建一个(隐藏)表,其中包含两个ForeignKey
,用于跨越关系的两个模型。好消息是,您可以自己指定一个模型,作为中间的模型,从而向该关系添加额外的字段,如:
对于一个
Race
对象,我们可以通过ordering
字段对它们进行排序来获得结果:例如,您可以将
Result
添加到ModelAdmin
,并更改Race
和Player
的任何组合的ordering
。