Не может использовать наследовавшийся Метакласс модели Django для конфигурирования поля, определенного в наследованной абстрактной модели

У меня была эта проблема о сервере, который я развертывал на и решил, что мне не было нужно

Microsoft. CodeDom. Поставщики. DotNetCompilerPlatform

Так, я удалил его через самородок и удалил ссылку в веб-конфигурации. Больше никаких проблем.

я первоначально попробовал к добавленному целевому узлу в .proj файл, как упомянуто в некоторых из других ответов, но которые просто приводят к другой ошибке, где эти msbuild не мог скопировать pagefile.sys, который казался, из какого я читал, чтобы быть ошибкой в пакете самородка.

6
задан MPelletier 16 June 2012 в 23:20
поделиться

2 ответа

Я думаю, это происходит из-за того, что используется Meta.verbose_name, а NamedModel.name создается при анализе класса NamedModel. Так что позже, когда класс OwnedModel будет проанализирован, нет возможности что-либо изменить.

Возможно, вы можете позже установить свойство help_text для OwnedModel.name, но это также может изменить NamedModel.name.

В аналогичных ситуациях я поместили переменные части в атрибут класса модели (не в Meta), а затем использовали методы / свойства времени выполнения для создания нужных мне текстов.

1
ответ дан 17 December 2019 в 07:07
поделиться

На самом деле я сделал следующее. Базовая модель получает метод класса dynamic_field_definition (), который можно использовать для исправления полей, при этом аргумент cls является правильным (наследующим) классом. Это означает, что мета-атрибуты cls относятся к правильному дочернему элементу, а не к исходной базе.

Затем я подключаю этот метод к вызову по сигналу class_prepared, чтобы вы знали, что в остальном все готово.

class NamedModel(models.Model):
    ...
    @classmethod
    def dynamic_field_definition(cls):
        pass

def dynamic_field_definition(sender, **kwargs):
    if issubclass(sender, NamedModel):
        sender.dynamic_field_definition()
class_prepared.connect(dynamic_field_definition)

Затем поле свойства, которые различаются в зависимости от класса модели, просто реконфигурируются этим методом класса (или, что более вероятно, метод переопределяется в производных классах).

Это немного хитрый способ привнести последний кусочек объектно-ориентированного подхода в модели Django, но он отлично работает для моей цели.

1
ответ дан 17 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: