使用models.py和多个ManyToManyFields()的Django导入问题

时间:2010-06-24 14:36:23

标签: python django web-applications

我正在使用django创建一个简单的比赛提交系统。这是我的第一个真正的django项目。基本上每个用户都可以查看问题列表,提交文件和查看结果页面。

每个问题都可以与多个竞赛相关联,不同的竞赛可以使用相同的问题。因此,问题和竞赛都有很多ToManyField彼此。这就是造成我问题的原因。

以下是我要使用的初始models.py实现:

startfile

来自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)

ENDFILE

有没有一种简单的方法来解决这个问题?或者我应该重新考虑我的整个布局?我尝试将每个类分解为自己的django应用程序,但我不认为这是我应该怎么做的。我得到的错误是找不到比赛(因为它在文件中较低)。

感谢所有建议!

2 个答案:

答案 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()