准备命令的字符串表示形式,然后执行id

时间:2019-06-19 09:58:41

标签: django

Django == 2.2.2

现在我有了以下代码:

模型

class YandexResponse(models.Model):
    time = models.DateTimeField(auto_now=True)
    campaigns = models.TextField()
    ad_groups = models.TextField()
    ads = models.TextField()
    keywords = models.TextField()
    sitelinks = models.TextField()

查看

yandex_response_record, created = YandexResponse.objects.get_or_create(id=1)

if what_to_update == "campaigns":
    yandex_response_record.campaigns=json.dumps(data)
    yandex_response_record.save()
elif what_to_update == "ad_groups":
    yandex_response_record.ad_groups=json.dumps(data)
    yandex_response_record.save()
...

我想要类似的东西:

tmp = "yandex_response_record.{}=json.dumps(data)".format(what_to_update)
execute(tmp);
yandex_response_record.save()

你能告诉我是否有可能吗?如果不可能的话,您能在这里建议我一些优雅的解决方案吗?

2 个答案:

答案 0 :(得分:0)

您正在寻找内置的setattr函数。

setattr(yandex_response_record, what_to_update, json.dumps(data))
yandex_response_record.save()

答案 1 :(得分:0)

为此,您可以使用docs中指定的 setattr 函数。

  

'setattr'是getattr()的对应物。参数是对象,字符串和任意值。该字符串可以命名现有属性或新属性。

您可以执行以下操作,而不是检查传递的字段的值:

yandex_response_record, created = YandexResponse.objects.get_or_create(id=1)
setattr(yandex_response_record, what_to_update, json.dumps(data))
yandex_response_record.save()

它的作用是更新what_to_update中提供的json.dumps(data)中指定的字段名称。

也许对您有帮助。