Как я могу переопределить поле ForeignKey только для чтения? Принудительно удалить атрибут? - PullRequest
1 голос
/ 04 февраля 2012

У меня есть список объектов Python, смешанных с экземплярами модели Django, и мне нужно перегрузить оператор __eq__ в некоторых полях для фильтрации. Это работает нормально, пока я не столкнусь с ForeignKey, который выдает ошибку из-за атрибута, принимающего только конкретный экземпляр модели.

Как я могу переопределить этот атрибут? Было бы неплохо даже удалить его, так как я не использовал его в шаблоне.

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

class AlwaysEqual(object):
    def __eq__(self, a):
        return True

for i in bag_of_objects:
   if certain_conditions_met:
       i.foo = AlwaysEqual()
       # ValueError: Cannot assign "AlwaysEqual": "ProductFile.option1" must be a "ProductOptionValue" instance.
       # is there a way to delete this attribute?

       del i.foo
       # AttributeError: __delete__

1 Ответ

0 голосов
/ 10 июня 2012

Почему вы используете немодельный экземпляр в этом случае? Просто создайте фиктивный экземпляр модели с переопределенным методом eq :

class MyDjangoModel(models.Model):
    match_always = False

    def __eq__(self, obj):
        if (self.match_always):
            return True
        return self.id == obj.id

    .....

always_equal = MyDjangoModel()
always_equal.match_always = True


for i in bag_of_objects:
    if certain_conditions_met:
        i.foo = always_equal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...