2013-07-30 2 views
1

Я совершенно не знаком ни с Python, ни с Django, поэтому, пожалуйста, извините меня, если этот вопрос немного простак.Django ModelForm или Form

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

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

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

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) 

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

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

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

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

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

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

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

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

Пол

+1

Я бы взял 'ModelForm' в любой день' Form' – karthikr

ответ

1

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

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

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

+0

Спасибо Брэндон, это то, что я думал, но не был уверен. Следующая часть моего вопроса была не столь ясна ... Три поля выбора, которые я хочу отображать, напрямую не связаны с конкретным полем модели.Таким образом, выпадающий список HomeTeam всегда будет показывать игроков в домашней команде, выпадающий список AayaTeam всегда будет показывать игроков в AwayTeam. Они не будут напрямую связаны с полем player1 и player2. Это связано с тем, что это зависит от ответа, выбранного в раскрывающемся списке, о том, какая команда «player1». Не знаю, с какой целью я справляюсь с этим .... можете ли вы сделать предложение? –

+0

ModelForms может состоять из полей, которые непосредственно не связаны с самой моделью, и вы можете переопределять выбор на основе других полей через ajax или путем изменения классов отображения css в параметрах. Итак, есть несколько подходов, которые вы можете предпринять. – Brandon