我有一個 Django 應用程式,我在其中維護網上商店的產品。由于許多產品有多種變體,并且在 Excel 中作業并不是最佳選擇,我認為 Python 可以幫助我并使作業更輕松。但是,為了匯入我的商店系統,我需要一個 CSV 檔案,這就是我的問題。
我有一個包含五個欄位的模型,其中兩個是多個欄位(django-multiselectfield)。
SIZES = (('16', 'Size 16'),
('17', 'Size 17'),
('18', 'Size 18'),
('19', 'Size 19'),
('20', 'Size 20'))
COLORS = (('white', 'White'),
('black', 'Black'),
('blue', 'Blue'),
('red', 'Red'),
('yellow', 'Yellow'))
class Items(models.Model):
name = models.CharField(_('Name'), max_length=254, null=True, blank=True, default='',)
sku = models.CharField(_('SKU'), max_length=254, null=True, blank=True, default='',)
size = MultiSelectField(_('Size'), choices=SIZES)
color = MultiSelectField(_('Color'), choices=COLORS)
price = models.DecimalField(_('Price'), max_digits=7, decimal_places=2)
我創建了兩個產品來展示我的需求
例如,在我的 CSV 檔案中,我需要為每種尺寸和顏色創建一個新行,以便在 webshop 軟體中正確創建變化。
所以我的 CSV 必須看起來像這樣:
"type","sku","attribute 1 name","attribute 1 value","attribute 2 name","attribute 2 value"
"variable","abc01921","size","16","color","white,black,blue"
"variation","abc01921_white_16","size","16","color","white"
"variation","abc01921_black_16","size","16","color","black"
"variation","abc01921_blue_16","size","16","color","blue"
"variable","abc01831","size","16,17","color","black,blue"
"variation","abc01831_black_16","size","16","color","black"
"variation","abc01831_blue_16","size","16","color","blue"
"variation","abc01831_black_17","size","17","color","black"
"variation","abc01831_blue_17","size","17","color","blue"

我如何才能最好地成功實施這一點?如何檢查它是變數還是變體,并使用此資訊將 CSV 行相應地寫入檔案?
uj5u.com熱心網友回復:
據我了解,您必須從 Django 資料庫值生成 CSV 檔案嗎?
為了能夠在沒有真實 Django 模型的情況下重現代碼,我創建Item的欄位與您的模型相同。CSV 生成代碼應該適用于 Django 真實模型物件(主要是......我不確定模型如何回傳MultiSelectField值)。
創建示例專案物件串列:
class Item:
def __init__(self, **kw):
self.name = kw['name']
self.sku = kw['sku']
self.size = kw['size']
self.color = kw['color']
self.price = kw['price']
items = [
Item(
**{
'name': 'product1',
'sku': 'abc123',
'size': ('16', '17'),
'color': ('green', 'orange'),
'price': 123
}
),
Item(
**{
'name': 'product2',
'sku': 'abc321',
'size': ('61', '71'),
'color': ('yellow', 'red'),
'price': 321
}
),
]
寫入包含所有專案的 csv 檔案:
header = ["type", "sku", "attribute 1 name", "attribute 1 value", "attribute 2 name", "attribute 2 value"]
csv_lines = [header]
for item in items:
csv_lines.append(['variable', item.sku, 'size', ','.join(item.size), 'color', ','.join(item.color)])
for size_variation in item.size:
for color_variation in item.color:
csv_lines.append(['variation', f'{item.sku}_{color_variation}_{size_variation}', 'size', size_variation, 'color', color_variation])
import csv
with open('./csv_file_to_import.csv', 'w', newline='') as csv_file:
write = csv.writer(csv_file, quoting=csv.QUOTE_ALL)
write.writerows(csv_lines)
檢查 csv 結果檔案:
"type","sku","attribute 1 name","attribute 1 value","attribute 2 name","attribute 2 value"
"variable","abc123","size","16,17","color","green,orange"
"variation","abc123_green_16","size","16","color","green"
"variation","abc123_orange_16","size","16","color","orange"
"variation","abc123_green_17","size","17","color","green"
"variation","abc123_orange_17","size","17","color","orange"
"variable","abc321","size","61,71","color","yellow,red"
"variation","abc321_yellow_61","size","61","color","yellow"
"variation","abc321_red_61","size","61","color","red"
"variation","abc321_yellow_71","size","71","color","yellow"
"variation","abc321_red_71","size","71","color","red"
如果您的 Django 應用程式的用戶無權訪問 Django 服務器存盤,您應該使 CSV 檔案可通過瀏覽器下載,而不是將其保存到磁盤。@DarkDrifterX99 已經回答了如何實作 CSV 回應
uj5u.com熱心網友回復:
我有一個包含五個欄位的模型,其中兩個是多個欄位(django-multiselectfield)
我需要為每種尺寸和顏色換一條新線,以便在網上商店軟體中正確創建變化。
我會假設每個產品資料庫條目都是一個“變數”,然后在為兩個多選欄位的每個計數寫入 CSV 時手動創建“變數”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417364.html
標籤:
上一篇:Dockerbuild給了我這個錯誤“/bin/sh:-crequiresanargument,Thecommand'/bin/sh-c'returnedanon-zerocode
下一篇:我無法創建django專案
