Отношение к Джанго много к многим отношениям? - PullRequest
1 голос
/ 02 января 2011

Я относительно новичок в Django и OO, поэтому я могу упустить что-то очевидное, но я не могу обернуться, как смоделировать следующее:

  • У меня естьлокации.

  • У меня есть игры.

В каждой локации может быть столько игр, сколько нужно, и игры могут быть в нескольких локациях (этиявляются играми, как в «монополии», название игры, а не конкретный экземпляр).

Это достаточно просто для моделирования с отношением m2m:

class Location(models.Model):
    name = models.CharField(max_length=300)
    city = models.CharField(max_length=300)
    [ etc etc ]
    games = models.ManyToManyField('Game', related_name='locations', blank=True)


class Game(models.Model):
    name = models.CharField(max_length=300)
    manufacturers = models.ForeignKey('Manufacturer')
    [ etc etc ]

У меня также есть обычный Djangoмодель пользователя.

Теперь, что я пытаюсь добавить к этому отношению, это концепция очков.

Пользователи должны иметь возможность вводить свои оценки для игры, расположенной в определенном месте.Затем я смогу показать, скажем, 10 лучших результатов для каждой игры в локации, а также 10 лучших результатов для игры во всех локациях.

Таким образом, в основном должен быть счет, связанный спользователь, игра и местоположение.

Мне кажется, что это должны быть какие-то отношения с самими отношениями.Я посмотрел на дополнительные поля отношений m2m и промежуточных моделей, но не могу найти способ сделать это правильно.

Любые указатели с удовольствием оценят.

Спасибо!

1 Ответ

1 голос
/ 02 января 2011

Если вы хотите сделать ссылку на выпуск между Game & Location, вам нужно создать промежуточную модель. Вот пример кода

class Location(models.Model):
    name = models.CharField(max_length=300)
    city = models.CharField(max_length=300)
    [ etc etc ]
    games = models.ManyToManyField('Game', related_name='locations', blank=True, through='GameLocation')


class Game(models.Model):
    name = models.CharField(max_length=300)
    manufacturers = models.ForeignKey('Manufacturer')
    [ etc etc ]

class GameLocation(models.Model):
    game = models.ForeignKey(Game)
    location = models.ForeignKey(Location)
    # some other filed like for example date

class Score(models.Model):
    user = models.ForeginKey('user')
    gamelocation = models.ForeginKey('GameLocation')
    score = models.DecimalField(max_digits=5, decimal_places=2)

Btw. Я бы переименовал ваш Game в GameType, а затем назвал бы GameLocation simple a Game.

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