Передача экземпляров модели в набор форм django

У меня определены следующие модели:

class Team(models.Model):
    Name = models.CharField(max_length=250)

class Fixture(models.Model):
    HomeTeam = models.ForeignKey(Team, related_name="HomeTeam")
    AwayTeam = models.ForeignKey(Team, related_name="AwayTeam")
    HomeTeamScore = models.IntegerField(blank=True, null=True)
    AwayTeamScore = models.IntegerField(blank=True, null=True)
    Date = models.DateTimeField()

class Prediction(models.Model):
    Fixture = models.ForeignKey(Fixture)
    PredictHomeTeam = models.IntegerField()
    PredictAwayTeam = models.IntegerField()
    PredictionDate = models.DateTimeField()
    User = models.ForeignKey(User)

Поэтому, если использовать фильтр для получения 6 фикстур на основе даты, я хотел бы передать их в набор форм PredictionForm, но я изо всех сил пытаюсь понять, как передать фикстуру, поскольку она требуется как поле внешнего ключа.

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


person xander    schedule 08.05.2011    source источник


Ответы (1)


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

from django.forms.models import modelformset_factory
PredictionFormSet = modelformset_factory(Prediction)

В документации по набору форм описано, как используйте исходные данные с вашим набором форм:

PredictionFormSet(initial=[{'Fixture': fixture, 'User': user}])

Как примечание, используйте строчные буквы и символы подчеркивания для всех методов/атрибутов вашего класса. Вместо этого:

Fixture = models.ForeignKey(Fixture)

Сделай это:

fixture = models.ForeignKey(Fixture)

Это облегчает чтение и анализ вашего кода для других программистов. Вам следует прочитать PEP 8, официальное руководство по стилю Python.

person zeekay    schedule 08.05.2011
comment
Похоже, именно то, что я после. Также спасибо за советы по конвенциям. - person xander; 08.05.2011