我有一个与Django模型实例混合的python对象列表,需要重载某些字段上的__eq__
运算符进行过滤。这个工作正常,直到我遇到ForeignKey
,由于该属性只接受特定的模型实例而引发错误。
如何覆盖此属性?即使删除它也会很好,因为我在模板中没有使用它。
这种模式的原因是在某些条件下,我希望某些属性始终与每个对象的传入搜索参数匹配(我在搜索的对象中有通配符,而不是搜索查询)。 p>
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__
答案 0 :(得分:0)
为什么在这种情况下使用非模型实例?只需使用覆盖 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