Django ModelForm или Форма

Я абсолютно новичок в Python и Django, поэтому, пожалуйста, извините, если этот вопрос немного простоват.

Я пишу небольшое приложение для отслеживания результатов бильярдного матча. Мне не нужно объяснять все детали, но основные объекты включают в себя:

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

Я сделал следующие модели:

class Team(models.Model):
    team_id = models.IntegerField(unique=True, max_length=5, blank=False,validators=[validate_five_digits])
    name = models.CharField(max_length=50, blank=False, null=False)


class Player(models.Model):
    id = models.IntegerField(unique=True, max_length=5, blank=False,validators=[validate_five_digits])
    team = models.ForeignKey(Team, blank=True, null=True)
    first_name = models.CharField(max_length=50, blank=False, null=False)
    last_name = models.CharField(max_length=50, blank=False, null=False)
    alias_name = models.CharField(max_length=50, blank=True, null=True)
    current_handicap = models.IntegerField()

class Match(models.Model):
    date = models.DateField(blank=False, null=False)
    location = models.CharField(max_length=255, blank=True, null=True)
    table_size = models.CharField(max_length=50, blank=True, null=True)
    home_team = models.ForeignKey(Team, related_name='home_team', blank=True, null=True)
    away_team = models.ForeignKey(Team, related_name='away_team', blank=True, null=True)


class Game(models.Model):
    match = models.ForeignKey(Match, blank=False, null=False)
    match_sequence = models.IntegerField(blank=True, null=True)
    player1 = models.ForeignKey(Player,related_name='player1', blank=False, null=False)
    player2 = models.ForeignKey(Player,related_name='player2', blank=False, null=False)
    player1_handicap = models.IntegerField(null=True, blank=True)
    player2_handicap = models.IntegerField(null=True, blank=True)

Я успешно создал Views и ModelForms для добавления / редактирования команд, игроков и матчей. Список матчей отображается в таблице с 1 совпадением на строку.... и теперь я хочу добавить кнопку для добавления новой игры.

Мой план состоит в том, чтобы сделать так, чтобы кнопка перешла на URL, который выглядит следующим образом:

game/new/?match_id=1  (or something like that)

Теперь для части, где я в замешательстве..... Когда вы собираетесь добавить новую игру, я хочу отобразить 3 поля выбора и только 3 поля выбора. В поле First Choice должны отображаться игроки из домашней команды, которые еще не играли в этом матче. В поле First Choice должны отображаться игроки из отсутствующей команды, которые еще не играли в игре в матче. Поле третьего выбора будет иметь только два варианта выбора (Home и Away).).... и будет указывать, какой игрок получает стрелять первым.

Затем, когда пользователь нажимает кнопку "Отправить", ему необходимо создать объект Game() с match_id из строки запроса, следующим порядковым номером для матча и Player1 = домашний или отсутствующий игрок на основе третьего поля выбора.

Я полностью сбит с толку о том, как это должно быть сделано.... я должен использовать формы.Form или ModelForm?

Любые предложения или скелетный код, чтобы подсказать мне?

Заранее спасибо за помощь с таким вопросом новичка!

Павел

1 ответ

Решение

Какой тип класса формы использовать при создании приложения Django - это простая проблема. Если вы редактируете модель, используйте ModelFormв противном случае используйте Form,

Если вам нужно ограничить выбор или изменить выбор на основе других данных, вы все равно можете сделать это с помощью ModelForm переопределив форму __init__()

Используя ModelForm уменьшит количество кода, необходимого для добавления Game Например, потому что ModelForm уже знает, как создать или обновить экземпляр Game, Вы бы справились с этим сами, если бы вы просто использовали Form учебный класс.

Другие вопросы по тегам