Django - цикл с использованием переменной models.PositiveIntegerField - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть этот код:

class Zapas(models.Model):
tym_domaci = models.ForeignKey(Tym, on_delete=models.CASCADE)
tym_hoste = models.ForeignKey(Tym, on_delete=models.CASCADE)
datum = models.DateTimeField('datum zapasu')
goly_domaci = models.PositiveIntegerField(default=0)
goly_hoste = models.PositiveIntegerField(default=0)

for x in range (goly_domaci):
    strelec = models.ForeignKey(Hrac, on_delete=models.CASCADE, limit_choices_to={Hrac.tym == tym_domaci})
    nahraval = models.ForeignKey(Hrac, on_delete=models.SET_NULL, blank=True, null=True, limit_choices_to={Hrac.tym == tym_domaci})

for x in range (goly_hoste):
    strelec = models.ForeignKey(Hrac, on_delete=models.CASCADE, limit_choices_to={Hrac.tym == tym_hoste})
    nahraval = models.ForeignKey(Hrac, on_delete=models.SET_NULL, blank=True, null=True, limit_choices_to={Hrac.tym == tym_hoste})

То, что я пытаюсь сделать, - это загрузить всех игроков, которые забили гол, и игроков, которые помогали ему (если есть), для каждой команды.Проблема в том, что я не могу использовать goly_domaci и goly_hoste в цикле for, потому что они являются PositiveIntegerField, а не целым числом.Есть ли способ конвертировать PositiveIntegerField в целое число?Или я могу даже использовать цикл for, как это?Я новичок в Python и Django, поэтому я действительно не знаю, как решить эту проблему.Спасибо за помощь: -)

1 Ответ

0 голосов
/ 15 декабря 2018

Нет, это не причина.Этот код не имеет смысла;Вы не можете определить поля динамически, как это.Поля зависят от столбцов в базе данных, модель должна иметь фиксированное количество полей.И goly_domaci само по себе является полем, в данный момент оно не имеет значения;оно имеет значение только при доступе из фактического экземпляра, когда уже слишком поздно определять другие поля.

Но это не то, что вы хотите делать в любом случае.Нет смысла определять все эти отдельные внешние ключи для одной и той же целевой модели.То, что вы хотите сделать, это определить отдельную модель для целей, которая указывает на эту модель (я полагаю, Zapas означает Game).

class Goal(models.Model):
    game = models.ForeignKey(Zapas)
    team = models.ForeignKey(Tym, on_delete=models.CASCADE)
    strelec = models.ForeignKey(Hrac, on_delete=models.CASCADE)
    nahraval = models.ForeignKey(Hrac, on_delete=models.SET_NULL, blank=True, null=True)

Тогда вы можете полностью удалить поля goly_domaci и goly_hoste,как вы можете рассчитать их, когда вам нужно отобразить их:

goly_hoste = my_zpas.goal_set.filter(team=my_zpas.tym_hoste).count()
goly_domaci = my_zpas.goal_set.filter(team=my_zpas.tym_domaci).count()
...