Django ORM update_or_create()区分大小写

时间:2018-06-08 12:43:53

标签: django python-3.x django-models django-orm

问题描述

我有一个名为SourceData的模型,如下所示:

class SourceData(models.Model):
    seller = models.ForeignKey(DataSourceStatus, null=True, default=True, related_name='source_data')
    sessions = models.FloatField(null=True, default=None)
    bounce_rate = models.FloatField(null=True, default=None)
    goal_completions_all = models.FloatField(null=True, default=None)
    goal_conversion_rate_all = models.FloatField(null=True, default=None)
    transactions = models.FloatField(null=True, default=None)
    transaction_revenue = models.FloatField(null=True, default=None)
    data_date = models.DateField()
    source = models.CharField(max_length=100)

当我尝试填充它时,我遍历一个记录列表,这些记录是字典对象,每个字段都有一个区分大小写的source字段。有时,这些source字段看起来像Master ListMASTER LIST,我想保留外壳。

这是我的人口方法:

source_data, created = SourceData.objects.update_or_create(
    seller=data_source_status,
    data_date=date_record,
    source__exact=sub.get('source', ' '),
    defaults={
        'seller': data_source_status,
        'data_date': date_record,
        'sessions': sub.get('sessions', 0),
        'bounce_rate': sub.get('bounceRate', 0),
        'goal_completions_all': sub.get('goalCompletionsAll', 0),
        'goal_conversion_rate_all': sub.get('goalConversionRateAll', 0),
        'transactions': sub.get('transactions', 0),
        'transaction_revenue': sub.get('transactionRevenue', 0),
        'source': sub.get('source', ' '),
    }
)

在查看了大量文档和StackOverflow文章之后,我将__eexact添加到了source param,我认为这将要求字符串完全是我检索到的更新记录。然而,这不是实际发生的事情。 Master List

会覆盖MASTER LIST

任何建议都会非常感激!

更新:我更新了代码以使用__exact和STILL,其他密钥覆盖了记录......

0 个答案:

没有答案