DRY полей в Django моделях - PullRequest
       5

DRY полей в Django моделях

1 голос
/ 06 января 2020

Я знаю об использовании наследования и абстрактных моделей при повторном использовании общих полей в разных моделях.

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

from django.db import models

common_modified_by = models.CharField()


class Author(models.Model):
    name = models.CharField()
    modified_by = common_modified_by


class Book(models.Model):
    title = models.CharField()
    modified_by = common_modified_by

Будет ли работать вышеуказанный код? Почему или почему нет?

1 Ответ

2 голосов
/ 06 января 2020

Проблема с повторным использованием одного и того же поля в нескольких моделях заключается в том, что атрибут model поля будет установлен на последнюю модель, где определено поле

from django.db import models

common_modified_by = models.CharField(max_length=20)


class Author(models.Model):
    name = models.CharField(max_length=20)
    modified_by = common_modified_by


class Book(models.Model):
    title = models.CharField(max_length=20)
    modified_by = common_modified_by

Поле теперь имеет Book как model, даже когда вы получаете поле от Author модели. Это может быть проблематично c

>>>  Book._meta.get_field('modified_by').model
<class 'foo.models.Book'>
>>>  Author._meta.get_field('modified_by').model
<class 'foo.models.Book'>

Одной из проблем может быть использование поля в качестве цели внешнего ключа django.db.models.fields.related, кажется, довольно часто использует этот атрибут model

Он также используется при создании подзапросов

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