Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » foreign key одной модели зависящий от foreign key в друго [RSS Feed]

#1 Апрель 11, 2013 01:20:23

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

Привет, сложно сформулировать в заголовке…
Вот такой вопрос: думаю большинство знакомо с django tutorial. там есть две модели Poll и Choice:

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Мне нужно знать как в Poll добавть еще одно поле, default_choice. Это должен быть FK собственно указывающий на вариант опроса по умолчанию
Если добвавить его в лоб:
default_question = models.ForeignKey(Choice)
то в нем можно будет использовать ID варианта, который вообще и не учавствует в текущем опросе.
Можно ли как-то это ограничить. т.е. что б в это поле можно было указать только id такого Choice, у которой poll соответствует id Poll куда мы эту запись добавляем. Надеюсь понятно.

Важно - я б скорей всего использовал другой вариант. Но мне нужно реализовать именно так. Это из тестового задания.

Офлайн

#2 Апрель 11, 2013 06:59:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

>>>Надеюсь понятно.
Неа, не оправдались надежды. Не понятно.

Вы вообще хотите странного, у Вас в Choice есть ссылка на Poll, теперь Вы хотите в Poll сделать ссылку на Choice. Так не делают.



Офлайн

#3 Апрель 11, 2013 09:13:39

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

FishHook
>>>Надеюсь понятно.Неа, не оправдались надежды. Не понятно.Вы вообще хотите странного, у Вас в Choice есть ссылка на Poll, теперь Вы хотите в Poll сделать ссылку на Choice. Так не делают.
Тем не менее вы все верно поняли.Именно это мне и нужно сделать.Ну а то, что так не делают — это ж тестовое задание, я упомянул, что сам сделал бы по другому

Офлайн

#4 Апрель 11, 2013 10:30:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

>>>Тем не менее вы все верно поняли.
Да почему же не добавить в Choice булево поле, указывающее на то, что это выбор по умолчанию и сделать unique_together на это поле и poll?

Но если уж настаиваете на кривом решении, то в том месте, где в poll записывается ID дефолтного Choise проверяйте его на валидность. “как то ограничить” средствами СУБД вряд ли получится, по крайней мере это сильно зависит от СУБД и Django тут вообще не при чем.



Офлайн

#5 Апрель 11, 2013 11:09:06

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

FishHook
Да почему же не добавить в Choice булево поле, указывающее на то, что это выбор по умолчанию и сделать unique_together на это поле и poll?
Потому что не я это придумал?

FishHook
Но если уж настаиваете на кривом решении, то в том месте, где в poll записывается ID дефолтного Choise проверяйте его на валидность. “как то ограничить” средствами СУБД вряд ли получится, по крайней мере это сильно зависит от СУБД и Django тут вообще не при чем.
Еще раз повторюсь, я бы сделал это по другому, я не настаиваю что это верное решение, более того, я согласен, что оно кривое. К сожалению ситуация не дает права выбора.
От СУБД такого и не жду. А вот ограничить средствами Django как раз можно (уверен на 99%). Вопрос - как? Подозреваю, что ковырять нужно в сторону limit_choices_to, но поскольку опыта мало, не знаю с какой стороны к нему подступиться.

Офлайн

#6 Апрель 18, 2013 10:47:36

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

foreign key одной модели зависящий от foreign key в друго

Зачем вам foreign key на модель choice? Сделайте как советовали выше, добавьте поле default в модель choice. Если нужно отображать в админке добавьте метод в модель poll default_choice. В форме для голосования передавайте в initial данное значение. Если все таки надо именно foreign key, добавьте в модель poll поле с параметрами null=true, blank=true и заполняйте его после создания голосования и вариантов.



Офлайн

  • Начало
  • » Django
  • » foreign key одной модели зависящий от foreign key в друго[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version