現在、DjangoにてCSVファイルからsqliteにsaveする処理を制作しています。CSVの内容をそのまま、ROUTE_MASTERテーブルに入れたいのですが、ROUTE_MASTERのROUTE_CODEをS_CONFIGの外部キーに設定しており、下記のようなエラーが出てしまいます。様々な記事を見ながら試行錯誤してみたのですが、解決できませんで、ご教授いただけると助かります。
Cannot assign "(<S_CONFIG: E1>, False)": "ROUTE_MASTER.ROUTE_CODE" must be a "S_CONFIG" instance.
因みにですが、初心者で書籍を参考にしながらDjangoを勉強しておりますので、質問の意図や内容に不備がありましたら申し訳ございません。
モデルは下記のように設定し、makemigrations,migrateしております。
python
1# Djangoのmodels.py 2class S_CONFIG(models.Model): 3 ROUTE_CODE = models.CharField(max_length=2, primary_key=True) 4 ROUTE_NAME = models.CharField(max_length=50,) 5 ROUTE_KANA = models.CharField(max_length=50,) 6 KP_MAX = models.CharField(max_length=5, blank=True, null=True,) 7 COMPANY_CODE = models.CharField(max_length=10, null=True,) 8 COMPANY_NAME = models.CharField(max_length=50,) 9 COMPANY_KANA = models.CharField(max_length=50,) 10 11 def __str__(self): 12 return self.ROUTE_CODE 13 14class ROUTE_MASTER(models.Model): 15 ROUTE_CODE = models.ForeignKey( 16 S_CONFIG, on_delete=models.CASCADE, related_name='ROUTE_ID',) 17 KP = models.CharField(max_length=5, blank=True, null=True,) 18 KP_LAT = models.FloatField() 19 KP_LON = models.FloatField() 20 KP_ELE = models.FloatField() 21 DEV_LOAD = models.IntegerField() 22 ERR_LAT = models.IntegerField() 23 ERR_LON = models.IntegerField() 24 25 def __str__(self): 26 return self.ROUTE_CODE 27 28 class Meta: 29 constraints = [ 30 models.UniqueConstraint(fields=['ROUTE_CODE', 'KP'], name='UNIQUE_ROUTE_KP'), 31 ]
下記の処理でupload.htmlからCSVをアップロードし、CSVの値自体は取得できます。
python
1# Djangoのviews.py 2 3from django.shortcuts import render 4from .models import ROUTE_MASTER, S_CONFIG 5import csv 6from io import TextIOWrapper, StringIO 7 8def upload(request): 9 10 if 'csv' in request.FILES: 11 form_data = TextIOWrapper(request.FILES['csv'].file, encoding='utf-8') 12 csv_file = csv.reader(form_data) 13 14 for line in csv_file: 15 route_cd = S_CONFIG.objects.get_or_create(ROUTE_CODE=line[0]) 16 kilo_post = line[1] 17 kp_lat = line[2] 18 kp_lon = line[3] 19 kp_ele = line[4] 20 dev_load = line[5] 21 err_lat = line[6] 22 err_lon = line[7] 23 save_data = ROUTE_MASTER( 24 ROUTE_CODE=route_cd, 25 KP=kilo_post, 26 KP_LAT=kp_lat, 27 KP_LON=kp_lon, 28 KP_ELE=kp_ele, 29 DEV_LOAD=dev_load, 30 ERR_LAT=err_lat, 31 ERR_LON=err_lon 32 ) 33 save_data.create() 34 35 return render(request, 'calculate/upload.html') 36 37 else: 38 return render(request, 'calculate/upload.html')
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/04 23:51