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()
你能告诉我是否有可能吗?如果不可能的话,您能在这里建议我一些优雅的解决方案吗?
答案 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)
中指定的字段名称。
也许对您有帮助。