如何在django中通过实例获取所有对象

Wor*_*ear 5 python django django-models

我需要像SomethingModel.objects.all()这样的所有对象.

class SometingModel(model.Model):

    def get_all_objects(self):
        __[what should i do?]__
        return queryset
Run Code Online (Sandbox Code Playgroud)

例如,

queryset = SomethingModel.objects.all()
queryset_by_instance = SomethingModel.objects.get(pk=1).get_all_objects()

queryset == queryset_by_instance <===== True {doesn't matter order}
Run Code Online (Sandbox Code Playgroud)

我需要这个来进行数据提取.喜欢

def get_filtered_data(object, object_attribute, min, max):
    return object.get_all_objects().filter(object_attribute__lte=max)\
        .filter(object_attribute__gte=min)
Run Code Online (Sandbox Code Playgroud)

Rah*_*pta 11

您可以使用__class__获取模型名称,然后获取所有对象.

In [1]: my_instance.__class__
Out[1]: app_name.models.SometingModel # returns the model 

In[2]: my_instance.__class__.objects.all()
Out[2]: [..list of objects..] # returns queryset
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用_meta.model@Spectras也如上所述.

In[3]: my_instance._meta.model
Out[3]: app_name.models.SometingModel # returns the model

In[4]: my_instance._meta.model.objects.all()
Out[4]: [..list of objects..] # returns queryset
Run Code Online (Sandbox Code Playgroud)

然后在您的模型中,您可以执行以下操作:

class SometingModel(model.Model):

    def get_all_objects(self):
        queryset = self._meta.model.objects.all()
        # can use the below method also
        # queryset = self.__class__.objects.all()   
        return queryset
Run Code Online (Sandbox Code Playgroud)