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

Python 如何覆盖ForeignKey只读字段?强制删除属性?,python,django,Python,Django,我有一个混合了Django模型实例的python对象列表,需要在一些字段上重载\uuuuu eq\uuu操作符以进行筛选。这可以正常工作,直到我遇到一个ForeignKey,它抛出一个错误,因为该属性只接受特定的模型实例 如何覆盖此属性?即使删除它也很好,因为我在模板中没有使用它 这种模式的原因是,在某些条件下,我希望某些属性始终在每个对象的基础上匹配传入的搜索参数(我在被搜索的对象中使用通配符,而不是搜索查询) 在这种情况下,为什么要使用非模型实例?只需使用覆盖的eq方法创建一个虚拟模型实例:

我有一个混合了Django模型实例的python对象列表,需要在一些字段上重载
\uuuuu eq\uuu
操作符以进行筛选。这可以正常工作,直到我遇到一个
ForeignKey
,它抛出一个错误,因为该属性只接受特定的模型实例

如何覆盖此属性?即使删除它也很好,因为我在模板中没有使用它

这种模式的原因是,在某些条件下,我希望某些属性始终在每个对象的基础上匹配传入的搜索参数(我在被搜索的对象中使用通配符,而不是搜索查询)


在这种情况下,为什么要使用非模型实例?只需使用覆盖的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

好主意!我喜欢。我很好奇如何覆盖属性本身。。。有一个我无法更改的属性很奇怪。为什么要覆盖它?我不太清楚这个覆盖的目的。。。你能举个例子吗?我为什么要推翻它并不重要:这是一个学术问题。
SingleRelatedObjectDescriptor
具有引发此错误的
\uuuuuuuuuuuuuuuuuuuuuu
。如何删除属性本身。如何重置属性?换句话说,我应该如何从
实例
中移除
fk_字段
,你这样破坏了模型。。。有很多方法可以修改模型值,但删除字段可能是最糟糕的方法。。。
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