2015-01-27 5 views

ответ

3

OneToOneRel внутренний класс, который реализует обратную ссылку на один к одному отношения с. Он нигде не документирован, не является частью какого-либо публичного api и не предназначен для использования в вашем приложении.

2

Сначала я подумал, что нет «OneToOneRel». Но есть. Это не в документации. Но он живет в исходном коде Django. Итак, есть первое отличие. ;)

Я решил посмотреть OneToOneField в источнике Django. Это docstring for the OneToOneField:

OneToOneField, по существу, такой же, как ForeignKey, с исключением того, что всегда несет в себе «уникальный» ограничение с ней и обратная связь всегда возвращает объект указал (так как будет только когда-либо), а не возвращать список.

Но мы все это знали. Отличная вещь есть, few lines down вы видите:

rel_class = OneToOneRel 

Так второе отличие заключается в том, что OneToOneRel используется в OneToOneField.

Чем я искал OneToOneRel в этом файле Python и нашел:

class OneToOneRel(ManyToOneRel): 
    ... 

Так что третье отличие заключается в том, что OneToOneRel является подклассом ManyToOneRel но OneToOneField подкласс ForeignKey.

Для меня этого достаточно знать: OneToOneRel используется в OneToOneField. OneToOneRel - это то, что ManyToOneRel для ForeignKey и ManyToManyRel для ManyToManyField. Эти классы rel, похоже, справляются с ограничениями.

Важная часть: вы не можете сравнивать OneToOneField с OneToOneRel так же, как вы можете сравнить OneToOneField с ForeignKey, потому что OneToOneRel не является полем отношений.

Смежные вопросы