<p>有几种方法可以在模型中保存字典。我要提到的是JSON字段的使用</p>
<p>如果您使用PostgreSql作为数据库,则可以访问JSON字段。你可以在<a href="https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/fields/" rel="nofollow noreferrer" title="Check documentation">documentation</a>上读到它。这将允许您将字典保存为Django支持的JSON文件</p>
<p>例如:</p>
<pre><code>from django.contrib.postgres.fields import JSONField
class Creditos1(models.Model):
dict_info = JSONField(default=dict)
</code></pre>
<p>在代码中</p>
<pre><code>sample_dict = [
{'sale_id': 14,
'name': 'Macarena',
'fecha': datetime.date(2021, 3, 11),
'debe': 500.0},
{'sale_id': 14,
'name': 'Macarena',
'fecha': datetime.date(2021, 4, 11),
'debe': 500.0},
{'sale_id': 15,
'name': 'Yamila',
'fecha': datetime.date(2021, 4, 14),
'debe': 2000.0}
]
credit = Creditos1.objects.create(dict_info=sample_dict)
</code></pre>
<p>如果您正在使用任何其他数据库,我建议将字段创建为<em><strong>CharField()</strong></em>。然后将dict编码为JSON字符串,并将该字符串保存到Credit中。然后您可以将JSON字符串解码回来</p>
<p>例如:</p>
<pre><code>class Creditos1(models.Model):
dict_info = CharField(blank=True, null=True)
</code></pre>
<p>在代码中:</p>
<pre><code>import json
sample_dict = [
{'sale_id': 14,
'name': 'Macarena',
'fecha': datetime.date(2021, 3, 11),
'debe': 500.0},
{'sale_id': 14,
'name': 'Macarena',
'fecha': datetime.date(2021, 4, 11),
'debe': 500.0},
{'sale_id': 15,
'name': 'Yamila',
'fecha': datetime.date(2021, 4, 14),
'debe': 2000.0}
]
encoded_json = json.dumps(sample_dict)
credit = Creditos1.objects.create(dict_info=encoded_json)
</code></pre>
<p>为了获得dict的值,可以使用<em><strong>json.loads()</strong></em></p>
<pre><code>decoded_data = json.loads(credit.dict_info)
print(decoded_data[0]["name"])
</code></pre>
<p><strong>更新</strong></p>
<p>据我所知,函数tabla_creditos()</strong></em>仍然不清楚,这可能是创建多个对象的原因,甚至可能是您没有清除数据库(使用代码删除所有记录<em><strong>Creditos1.objects.all().delete()</strong></em>)</p>
<p>如果要将字典列表保存为每个对象(假设有一个干净的DB)
您的代码:</p>
<pre><code>h = some_func()
uniquefied_list = list({v['sale_id']:v for v in h}.values())
for x in range(0, len(uniquefied_list)):
Creditos1.objects.get_or_create(name=h[x]["name"], debe=h[x]["debe"]....)
</code></pre>
<p>在这里,get_或_create将是更好的处理方法这里是<a href="https://docs.djangoproject.com/en/3.2/ref/models/querysets/#get-or-create" rel="nofollow noreferrer">documetation</a></p>
<p>希望这能解决你的问题</p>