В чем основное отличие от OneToOneField от django и OneToOneRel от django.Разница между OneToOneField и django OneToOneRel
Когда я искал я наткнулся:
What's the difference between django OneToOneField and ForeignKey?
В чем основное отличие от OneToOneField от django и OneToOneRel от django.Разница между OneToOneField и django OneToOneRel
Когда я искал я наткнулся:
What's the difference between django OneToOneField and ForeignKey?
OneToOneRel внутренний класс, который реализует обратную ссылку на один к одному отношения с. Он нигде не документирован, не является частью какого-либо публичного api и не предназначен для использования в вашем приложении.
Сначала я подумал, что нет «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 не является полем отношений.