首页 > 解决方案 > 如何从一个模型访问值并传递给 Django 中的另一个模型?

问题描述

我有一个模型称为权重(由用户输入/选择填充),另一个模型称为企业。

class Weight(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="weights")
    weight_of_history = models.IntegerField(null=True, blank=True)


class Enterprise(models.Model):
...

重量被保存,每个用户一个,每次用户选择新的时都会更换。

在 Enterprise 类中,我正在创建一个属性,该属性必须从 Weight 类中获取“weight_of_history”(取决于选择权重的用户),但模型之间没有外键或相关名称。

class Enterprise(models.Model):
...

    @property
    def ranking(self):
        
        weight_of_history = <-- HERE I NEED TO TAKE WEIGHT_HISTORY FROM THE FIRST MODEL
        THEN I COULD CALCULATE

我怎么能那样做?谢谢!

标签: djangoclassmodel

解决方案


您可以使用 django 强大的查询功能并从数据库中获取所需的对象。以下是可能对您有所帮助的文档。Django 文档很棒,所以我建议您阅读查询、模型和表单,以便更轻松地完成项目。

对于您的示例,我们可以通过按用户过滤权重来在一个查询中获取用户的所有权重。事实上,django ORM 允许链接过滤器,您可以创建非常复杂的查询

class Enterprise(models.Model):
...

    @property
    def ranking(self):
        
        weight_of_history = Weight.objects.filter(user=some_user)

如果您事先不知道用户,那么您可以在视图内部执行并获取发出请求的用户并使用此用户进行过滤:

#views.py

user_making_request = request.user
weight_of_history = Weight.objects.filter(user=user_making_request)

推荐阅读