Python:如何继承和重写具有queryset的方法?
我有2类Python:如何继承和重写具有queryset的方法?,python,django,inheritance,Python,Django,Inheritance,我有2类A和B: class A(ListView): model=Model_name def get_queryset(self): instance = self.get_user_by_credential(...) if instance: model_instance = self.model.objects.get(id=instance.id)
A
和B
:
class A(ListView):
model=Model_name
def get_queryset(self):
instance = self.get_user_by_credential(...)
if instance:
model_instance = self.model.objects.get(id=instance.id)
some_objects= self.Model_name.objects.filter(content_id=5, object_id=model_instance.id)
return some_objects
return []
class B(A,UserObject):
model=B_model
param='foo'
def get_queryset(self):
instance = self.get_user_by_credential(...)
if instance:
model_instance = self.model.objects.get(id=instance.id, param=param)
some_objects= Model_name.objects.filter(content_id=5, object_id=model_instance.id)
return some_objects
return []
这两个类之间的区别只是B
queryset中的param
如何重写父类
A
的方法并向子类B
的查询集添加一个参数?您可以创建一个get\u model\u instance
方法,然后在A实现中使用该方法,以便可以删除B中的实现
def get_model_instance(self):
instance = self.get_user_by_credential(...)
if instance:
return self.model.objects.get(id=instance.id)
return None
def get_model_instance(self):
instance = self.get_user_by_credential(...)
if instance:
return self.model.objects.get(id=instance.id, param=param)
return None
或者按照丹尼尔·罗斯曼的建议
def get_model_instance(self, instance):
...
您只需创建一个
get\u model\u instance
方法,然后在a实现中使用该方法,以便在B中删除该实现
def get_model_instance(self):
instance = self.get_user_by_credential(...)
if instance:
return self.model.objects.get(id=instance.id)
return None
def get_model_instance(self):
instance = self.get_user_by_credential(...)
if instance:
return self.model.objects.get(id=instance.id, param=param)
return None
或者按照丹尼尔·罗斯曼的建议
def get_model_instance(self, instance):
...
感谢您的回答,但是
实例.id
来自if。。else
语句。我无法用其他方法创建它。@pietá-将其移动到get实例,或将其保存在get\u queryset
中,但将其作为参数传递给get\u model\u实例。
。感谢您的回答,但是实例.id
来自if。。else
语句。我无法用其他方法创建它。@pietá-将其移动到get实例,或将其保存在get\u queryset
中,但将其作为参数传递给get\u model\u实例。我不明白为什么要获取ID为user对象的B\u模型对象。你怎么知道他们会有相同的ID?我有很多用户配置文件..我必须获取当前活动用户的模型对象要获取当前登录用户的模型对象,请使用request.user
;否则你就会有一个安全漏洞,任何人都可以通过在查询字符串中尝试不同的ID来查看其他用户的数据。我不明白为什么你会得到一个ID为用户对象的B_模型对象。你怎么知道他们会有相同的ID?我有很多用户配置文件..我必须获取当前活动用户的模型对象要获取当前登录用户的模型对象,请使用request.user
;否则,就会出现一个安全漏洞,任何人都可以通过在查询字符串中尝试不同的ID来查看其他用户的数据。