如何覆盖ForeignKey只读字段?强制删除属性?

时间:2012-02-04 00:43:26

标签: python django

我有一个与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__

1 个答案:

答案 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