我正在使用django创建一个简单的比赛提交系统。这是我的第一个真正的django项目。基本上每个用户都可以查看问题列表,提交文件和查看结果页面。
每个问题都可以与多个竞赛相关联,不同的竞赛可以使用相同的问题。因此,问题和竞赛都有很多ToManyField彼此。这就是造成我问题的原因。
以下是我要使用的初始models.py实现:
来自django.db导入模型
class User(models.Model):
username = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50)
类问题(models.Model):
name = models.CharField(max_length=50)
filename = models.CharField(max_length=300)
contests = models.ManyToManyField(Contest)
课程竞赛(models.Model):
name = models.CharField(max_length=50)
problems = models.ManyToManyField(Problem)
date = models.DateField()
类提交(models.Model):
user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
filename = models.CharField(max_length=300)
有没有一种简单的方法来解决这个问题?或者我应该重新考虑我的整个布局?我尝试将每个类分解为自己的django应用程序,但我不认为这是我应该怎么做的。我得到的错误是找不到比赛(因为它在文件中较低)。
感谢所有建议!
答案 0 :(得分:2)
您在比赛和问题中都不需要ManyToManyField。多对多字段已经是双向的。只要把它放在一个 - 无所谓。
答案 1 :(得分:1)
Djano将自动为您创建反向关系,因此您只需要创建它的一端,例如。
class Problem(models.Model):
name = models.CharField(max_length=50)
filename = models.CharField(max_length=300)
contests = models.ManyToManyField(Contest, related_name='problems')
related_name
使您可以为反向关系指定名称。如果没有在Contest
模型上定义关系,您可以访问例如。 a_contest.problems.all()
!