2017-07-25 30 views
0

我用loaddata加載我的燈具(Django doc.)相同的對象Django的`loaddata`漂亮的方式來加載不同的PK(ID)

例如我有這個example.json

[ 
{ 
    "model": "foo.bar", 
    "pk": 1, 
    "fields": { 
    "name": "dmytryi" 
    } 
}, 
    { 
    "model": "foo.bar", 
    "pk": 2, 
    "fields": { 
    "name": "dmytryi" 
    } 
}, 
... (repeat it until pk is not 10 with increasing pk by one) 
{ 
    "model": "foo.bar", 
    "pk": 10, 
    "fields": { 
    "name": "dmytryi" 
    } 
}, 
] 

你怎麼看,我有10個相同的對象(同一個模型名稱相同),但具有不同的pk值。 loaddata後我會在我的數據庫中看到10個對象。沒關係。

給出提示如何減少代碼,但保留相同的結果(如果存在)。謝謝!

回答

0
base = { 
    "model": "foo.bar", 
    "fields": { 
    "name": "dmytryi" 
    } 
} 

data = [{**base, **{'pk': id}} for id in range(1, 11)] 

這將解開base字典和詞典{'pk': id}到一個新的字典。輸出看起來是這樣的:

[{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 0}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 1}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 2}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 3}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 4}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 5}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 6}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 7}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 8}, 
{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar', 'pk': 9}] 

你可以把它也不像這個短:

[{**{'fields': {'name': 'dmytryi'}, 'model': 'foo.bar',}, **{'pk': i}} for i in range(1, 11)] 

,但我認爲這是糟糕的。