Проблема импорта в Django с models.py и множеством ManyToManyFields () - PullRequest
0 голосов
/ 24 июня 2010

Я работаю над созданием простой системы подачи заявок на конкурс с использованием django. Это мой первый настоящий проект Django. По сути, каждый пользователь может просмотреть список проблем, отправить файл и просмотреть страницу результатов.

Каждая проблема может быть связана с несколькими конкурсами, и разные конкурсы могут использовать одну и ту же проблему. Из-за этого и проблема, и соревнование имеют много полей друг с другом. Это то, что вызывает мою проблему.

Вот начальная реализация models.py, с которой я собираюсь:

StartFile

из импортных моделей django.db

Класс пользователя (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)

Соревнование класса (модели. Модель):

name = models.CharField(max_length=50)
problems = models.ManyToManyField(Problem)
date = models.DateField()

Представление класса (модели. Модель):

user = models.ForeignKey(User)
problem = models.ForeignKey(Problem)
filename = models.CharField(max_length=300)

ENDFILE

Есть ли простой способ это исправить? Или я должен переосмыслить весь мой макет? Я пытался разбить каждый класс на собственное приложение django, но я не думаю, что именно так я должен это делать. Ошибка, которую я получаю, состоит в том, что Contest не может быть найден (поскольку он существует ниже в файле).

Весь совет приветствуется!

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Вам не нужно ManyToManyField как в конкурсе, так и в задаче. Поля «многие ко многим» уже являются двунаправленными. Просто надень это - не важно, какой.

1 голос
/ 24 июня 2010

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()!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...