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
учебный класс.