Как оформить отношения OneToOne в Джанго - PullRequest
0 голосов
/ 04 марта 2019

Я изо всех сил пытаюсь разработать отношения между моделями.

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

Будет больше моделей с адресами.Например, 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.

У вас есть аргументы, какой из них более предпочтителен, или у вас есть идея, как это сделать по-другому?

...