Я изо всех сил пытаюсь разработать отношения между моделями.
Я работаю над базой для большого проекта, поэтому хочу, чтобы все было как можно более универсальным.
Будет больше моделей с адресами.Например, auth.User
, Client
, Property
, поэтому я решил создать приложение addresses
с моделью Address
.То же самое с contacts.ContactInformation
.
Это гораздо более интуитивно и модульно, чтобы сделать это:
class Client(..):
address = OneToOneField('addresses.Address',on_delete=PROTECT...
contact_information = OneToOneField('contacts.ContactInformation'...)
Чем это:
class Address(..):
client = OneToOneField('clients.Client',on_delete=CASCADE)
Проблемы с 1.
Я не могу использовать многие встроенные функции, такие как admin inlines
, on_delete=CASCADE
и т. Д. Адрес обязателен.
Проблемы с 2.
AsЯ уже упоминал, что это гораздо менее интуитивно понятно для новых разработчиков и теоретически, я не могу быть уверен, что каждый адрес имеет либо Client
, User
или Property
.И вы не можете сразу увидеть, что Client
имеет Address
.
Так что теперь я рассматриваю несколько подходов.
1. Первый -используйте add_to_class
, чтобы я мог поместить всю логику в одно приложение (например, clients
для Client
:
class Client...
....
Address.add_to_class('client',OneToOneField('clients.Client',on_delete=CASCADE...
Я мог бы использовать встроенные функции администратора, формы, и каждый мог ясно видеть, что Client
имеетAddress
.
2.
Я мог бы создать несколько Address
моделей, таких как ClientAddress
, UserAddress
, в которых используется абстрактная модель AbstractAddress
.
У вас есть аргументы, какой из них более предпочтителен, или у вас есть идея, как это сделать по-другому?