Python 使用DRF的延迟加载

Python 使用DRF的延迟加载,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想用Django Rest框架做一个简单的延迟加载。 我在Laravel方面有着坚实的背景,你可以简单地像这样使用它: Subscription::with('company')->paginate() 但在DRF方面我遇到了问题。一家公司可以有一次订阅,我的型号定义如下: 公司 class CompanyManager(BaseUserManager): def create_用户(自我、电子邮件、密码=无): """ 使用给定的电子邮件和密码创建并保存用户 """ 如果不是电子邮件

我想用Django Rest框架做一个简单的
延迟加载
。
我在
Laravel
方面有着坚实的背景,你可以简单地像这样使用它:

Subscription::with('company')->paginate()
但在DRF方面我遇到了问题。一家公司可以有一次订阅,我的型号定义如下:

公司

class CompanyManager(BaseUserManager):
def create_用户(自我、电子邮件、密码=无):
"""
使用给定的电子邮件和密码创建并保存用户
"""
如果不是电子邮件:
raise VALUERROR('用户必须有电子邮件地址')
user=self.model(
电子邮件=自我规范化电子邮件(电子邮件),
)
user.set_密码(password)
user.save(使用=self.\u db)
返回用户
类别公司(AbstractBaseUser):
"""
公司在官方文件中将我们的推荐人称为“Empresa合作伙伴”
属性:
名称:主要公司的名称
电子邮件:联系主要公司的电子邮件
代码:归属于该公司的代码
"""
id=models.UUIDField(主键=True,默认值=uuid.uuid4,可编辑=False)
email=models.EmailField(unique=True)
username=models.CharField(空白=True,最大长度=100)
is_staff=models.BooleanField(空白=真,默认=假)
我们的系统日期=models.datetime字段(auto\u now=True)
用户名\字段='电子邮件'
必填_字段=[]
对象=公司管理器()
定义(自我):
返回self.email
订阅

类订阅(models.Model):
"""
引用计划和公司的订阅
:公司:
此订阅的所有者
:计划:
此订阅所基于的计划
:开始:
订阅何时开始
:完:
此订阅结束时
"""
company=models.ForeignKey(company,on_delete=models.CASCADE)
计划=模型.ForeignKey(计划,on_delete=模型.CASCADE)
start=models.DateTimeField()
ends=models.DateTimeField()
已创建\u at=models.DateTimeField(auto\u now=True)
我曾尝试使用此答案引用的
select\u related
,但每次我向端点发出请求时,它都不会显示
订阅的相关
公司

如何使用
选择与之相关的

def列表(self、request、*args、**kwargs):
queryset=Subscription.objects\
.all()。选择与之相关的(“公司”)\
.order_by('-created_at'))
page=self.paginate_queryset(queryset)
如果页面不是“无”:
序列化程序=订阅序列化程序(
页
多=真,
)
返回self.get_分页的_响应(serializer.data)
在我的
订阅服务器中

类订阅序列化程序(ModelSerializer):
类元:
型号=订阅
字段=(
“公司”,
“计划”,
“开始”,
"结束",,
“创建于”,
)

如果要返回相关模型的字段而不仅仅是其主键,则需要为相关模型定义序列化程序(此处:
CompanySerializer
),并指示父序列化程序使用它:

class SubscriptionSerializer(ModelSerializer):
    company = CompanySerializer()

    class Meta:
        model = Subscription
        fields = (
            'company',
            # ...
        )

我认为这比DRF更适合Django,在Django中,所有查询集默认都是惰性的。-我对Django/DRF还相当陌生,我正在尝试建立Django/DRF概念和Laravel概念之间的关系。我这里的问题可能出于某种原因出现在订阅序列化中(至少这是我的理解)。这就是为什么DRF标签似乎也会对您感兴趣@iklinac非常感谢。我认为DRF理解Django的关系,不需要定义它们。谢谢你的链接,阅读后它解决了我的问题。谢谢你,Endre。正如我在评论中所说的,我认为DRF理解与Django的关系,没有必要“序列化”它们。非常感谢。