Переопределение __str__ разрешает передачу строки в поле внешнего ключа Django

#django #django-models

#django #django-модели

Вопрос:

У меня есть форма в Django, которая позволяет преподавателю выбирать блоки, которые были созданы в базе данных. При нажатии на выпадающее меню отображается что-то вроде Unit object (ICT270), поэтому я переопределяю функцию str Unit model для возврата self.code, а self.code является первичным ключом Unit model. По-видимому, после того, как я сделаю это, каждый раз, когда мне нужно заполнить поле внешнего ключа для модели Unit, я могу просто передавать строку вместо самого объекта Unit. Передача объекта Unit также работает. например, Class.objects.filter(unit_id=’ICT270′).first(). В прошлом мне нужно было передавать объект Unit, а не строку. Меня это немного беспокоит, я чувствую себя уязвимым, если могу передать такую строку. Как вы думаете, это неожиданное поведение или совершенно безопасное, если str включает в себя все первичные ключи этой модели? Спасибо

редактировать : или вместо переопределения str в models.py могу ли я переопределить ее в forms.py ? так что функция str не будет работать в другом коде. Спасибо

Комментарии:

1. Это не тот случай. Определение метода str вообще не меняет способ установки значений или доступа к ним.

2. @DanielRoseman как ни странно, Class.objects.filter(unit_id=’ICT270′).first().exists() возвращает True, а unit_id является полем внешнего ключа для модели Unit

3. Итак, покажите свои модели. py со всеми определениями FK и PK.

4. Похоже, что «ICT270» является первичным ключом модели Unit. Как говорит Иван, покажите определения вашей модели.