Отображение сложных объектов Python в модели Django - PullRequest
3 голосов
/ 24 октября 2009

У меня есть определенная структура классов в моем приложении, которая в настоящее время использует django для презентации. Я вообще не использовал слой модели, - подпрограммы взаимодействия с базой данных написаны от руки.

Я, однако, рассматриваю возможность фактического использования django в полном объеме и фактического использования уровня абстракции базы данных. Вопрос в том, как наилучшим образом интегрировать мою существующую структуру классов со слоем модели.

Пример класса:

class UpperClass(base):
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        # attr1 and attr2 are actually instances of, say, 
        # CustomType1 and CustomType2

Итак, вот как я собираюсь сопоставить это с моделью django:

class UpperClass(models.Model):
    attr1 = CustomType1Field(...)
    attr2 = CustomType2Field(...)

Это достаточно просто - все материалы по сериализации и проверке уже написаны, так что совсем не составит труда создать классы пользовательских полей для CustomType1 и CustomType2.

Реальный вопрос в том, куда я помещаю пользовательское (не связанное с базой данных) поведение фактического UpperClass. В моем понимании, существуют модели для «ввода и вывода данных из базы данных», но куда же ведет себя такое поведение? Встраивать ли не связанные с базой данных методы в экземпляры модели UpperClass? На самом деле, я в растерянности здесь. Надеюсь, что это имеет хотя бы частичный смысл для вас.

Ответы [ 2 ]

3 голосов
/ 24 октября 2009

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

0 голосов
/ 24 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...