如何遍历模型实例的多个到一个字段?

时间:2017-08-07 07:30:13

标签: python django

我想编写一个模型方法来修改它的嵌套字段

我在迭代与主模型相关的对象时遇到了麻烦。代码特别是:

def set_si_units(self):
    self.currently.get_si_units()
    for i in range(0, self.hourly.data.count()):
        self.hourly.data[i].get_si_units()

修改self.currently的第2行无故障地运行并且我接收到转换后的温度。然而,for循环给出了以下错误:

TypeError: 'RelatedManager' object does not support indexing

我真的希望能够单独遍历Data模型的每个实例,这样我就可以像使用Currently模型一样转换温度。

我也在下面列出了相关代码。如果您需要查看其他内容,请与我们联系。我非常感谢任何有关我的方法的帮助或反馈!

追溯

File "/path_to_project/project/weather/models.py", line 137, in get_si_units
    self.hourly.data[i] = self.hourly.data[i].get_si_units()
TypeError: 'RelatedManager' object does not support indexing

带有get_si_units()的类(例如,当前和数据)

class SomeClass(model.Models):
    temperature = models.FloatField(null=True, blank=True)
    ... # Other fields

    def convert_f_to_c(self, temperature_f):
        ...

    def get_si_units(self):
        data_point = self
        data_point.temperature = self.convert_f_to_c(self.temperature)
        ... # Convert other fields
        return data_point

我坚持的位置等级

class Location(models.Model):
    currently = models.OneToOneField(Currently, on_delete=models.CASCADE)
    hourly = models.OneToOneField(Hourly, on_delete=models.CASCADE)
    ...
    def set_si_units(self):
        self.currently.get_si_units()
        for i in range(0, self.hourly.data.count()):
            self.hourly.data[i].get_si_units()

1 个答案:

答案 0 :(得分:0)

您可以使用获取所有对象然后迭代它。

class Location(models.Model):
    currently = models.OneToOneField(Currently, on_delete=models.CASCADE)
    hourly = models.OneToOneField(Hourly, on_delete=models.CASCADE)
    ...
    def set_si_units(self):
        self.currently.get_si_units()
        for hourly_data in self.hourly.data.all():
           hourly_data.get_si_units()