Django 导入模型与多个 ManyToManyFields() 的问题
我正在用django创建一个简单的比赛提交系统。这是我第一次做真正的django项目。基本上,每个用户可以查看问题列表,提交文件,并查看结果页面。
每个问题可以关联多个比赛,而不同的比赛可以使用相同的问题。因此,问题和比赛之间有一个多对多的关系。这就是我遇到的问题所在。
这是我目前在models.py文件中的初步实现:
startfile
from django.db import models
class User(models.Model):
username = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50)
class Problem(models.Model):
name = models.CharField(max_length=50)
filename = models.CharField(max_length=300)
contests = models.ManyToManyField(Contest)
class Contest(models.Model):
name = models.CharField(max_length=50)
problems = models.ManyToManyField(Problem)
date = models.DateField()
class Submission(models.Model):
user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
filename = models.CharField(max_length=300)
endfile
有没有简单的方法来解决这个问题?还是我应该重新考虑我的整个布局?我尝试把每个类分成自己的django应用,但我觉得这样做不太对。我遇到的错误是找不到Contest(因为它在文件中定义得比较低)。
非常感谢任何建议!
2 个回答
1
Django会自动为你创建反向关系,所以你只需要在一端创建它,比如说。
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()
来访问它!
2
在Contest和Problem这两个地方,你不需要都使用ManyToManyField。因为多对多的关系本身就是双向的。只要在其中一个地方加上就可以了,放在哪个地方都没关系。