Найти - Пользователи
Полная версия: foreign key одной модели зависящий от foreign key в друго
Начало » Django » foreign key одной модели зависящий от foreign key в друго
1
whow
Привет, сложно сформулировать в заголовке…
Вот такой вопрос: думаю большинство знакомо с 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 куда мы эту запись добавляем. Надеюсь понятно.

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

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

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

FishHook
Но если уж настаиваете на кривом решении, то в том месте, где в poll записывается ID дефолтного Choise проверяйте его на валидность. “как то ограничить” средствами СУБД вряд ли получится, по крайней мере это сильно зависит от СУБД и Django тут вообще не при чем.
Еще раз повторюсь, я бы сделал это по другому, я не настаиваю что это верное решение, более того, я согласен, что оно кривое. К сожалению ситуация не дает права выбора.
От СУБД такого и не жду. А вот ограничить средствами Django как раз можно (уверен на 99%). Вопрос - как? Подозреваю, что ковырять нужно в сторону limit_choices_to, но поскольку опыта мало, не знаю с какой стороны к нему подступиться.
svas
Зачем вам foreign key на модель choice? Сделайте как советовали выше, добавьте поле default в модель choice. Если нужно отображать в админке добавьте метод в модель poll default_choice. В форме для голосования передавайте в initial данное значение. Если все таки надо именно foreign key, добавьте в модель poll поле с параметрами null=true, blank=true и заполняйте его после создания голосования и вариантов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB