用json数组中的最高值更新Django模型

2024-04-26 05:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到的问题是,我想用json值更新Django模型。问题是json中的一些值是一个包含多个数字的列表。你知道吗

这就是json的样子:

json = {'fields': {'resources': [], 'initiative': [8, 21, 22]}, 'pk': 81}
{'fields': {'resources': [], 'initiative': [5, 8, 22]}, 'pk': 82}
{'fields': {'resources': [], 'initiative': [8, 22]}, 'pk': 83}
{'fields': {'resources': [], 'initiative': [6]}, 'pk': 84}

def update_model():
    for row in json:
Model.objects.filter(id=row['pk']).update(initiative_id=row['fields']['initiative'][0], resources_id=row['fields']['resources'][0])

我想不出如何在堆栈上正确地隔开模型线。你知道吗

无论如何,当我运行这个方法时,我得到“IndexError:list index out of range”,大概是因为这个方法只能处理一个值为1的列表。你知道吗

我需要数组中的最高值来更新模型。你知道吗

型号:

class Model(models.Model):
    name = models.CharField(max_length=100, unique=True)
    genre = models.ManyToManyField(Genre, blank=False)
    platform = models.ManyToManyField(Platform, blank=True)
    standard_type = models.ForeignKey(StandardType, default=SetDefaults.set_standard_type_default, blank=True)
    owner = models.ManyToManyField(Owner, blank=True)
    evaluated_by = models.ForeignKey(Evaluator, blank=True, default=SetDefaults.set_default_evaluator())
    business_driver= models.ManyToManyField(BusinessDriver, blank=True)
    initiative = models.ForeignKey(Initiative, null=True, blank=True)
    solution = models.ManyToManyField(Solution, blank=True)
    point_of_contact = models.ForeignKey(Contact, null=True, default=SetDefaults.set_default_contact, blank=True)
    description = models.TextField(blank=True)
    required_by = models.ForeignKey(LifecycleStage, null=False, default=SetDefaults.set_required_by_default, blank=True)
    resources = models.ForeignKey(Resource, null=True, blank=True)
    change_notes = models.TextField(null=True, blank=True)
    change_date = models.DateField(null=True, blank=True)
    is_active = models.BooleanField(default=True)

Tags: jsontruedefaultfieldsmodelsnullrowresources
1条回答
网友
1楼 · 发布于 2024-04-26 05:42:26

假设您只想从“计划”或“资源”列表(如果存在)中指定第一个值:

def update_model():
    for row in json:
        initiative = row['fields']['initiative']
        resources = row['fields']['resources']

        initiative_id = max(initiative) if initiative else None
        resources_id = max(resources) if resources else None

        Model.objects.filter(id=row['pk']).update(
            initiative_id=initiative_id, 
            resources_id=resources_id
        )

相关问题 更多 >