【问题标题】:How do you import a CSV file into django with foriegn keys如何使用外键将 CSV 文件导入 django
【发布时间】:2020-07-04 11:47:12
【问题描述】:

我正在尝试将数据从 csv 文件导入 Django,但我不断收到此错误:

NOT NULL 约束失败:error_boilermodel.ModelBrand_id

我的模型是这样的:

        from django.db import models
    
    # Create your models here.
    class BoilerBrand(models.Model):
        BrandName = models.CharField(max_length=40, blank=False)
    
        def __str__(self):
            return self.BrandName
    
        class meta:
            db_table = 'Boiler_Brand'
    
    
    class BoilerModel(models.Model):
        ModelBrand = models.ForeignKey('BoilerBrand', on_delete=models.CASCADE,)
        ModelName = models.CharField(max_length=600, blank=False)
    
        def __str__(self):
            return self.ModelName
        class meta:
            db_table = 'Boiler_Model'
    
    class BoilerError(models.Model):
        BoilerBrand = models.ForeignKey('BoilerBrand', on_delete=models.CASCADE,)
        BoilerModel = models.ForeignKey('BoilerModel', on_delete=models.CASCADE,)
        ErrorCode = models.CharField(max_length=40, blank=False)
        ErrorDesc = models.CharField(max_length=200, blank=False)
        ErrorFix = models.CharField(max_length=200, blank=False, default="Call a technician")
    
    
        def __str__(self):
            return self.ErrorCode
    
        class meta:
            db_table = 'Boiler_Error'

我的导入代码是这样的:

    import csv
from error.models import BoilerError,BoilerBrand,BoilerModel
ImportBrandName = "worcester-bosch"

def run():
    file = open("D:/python tratining/boilererror/error/csv-error-codes/worcester-bosch-error-codes-Copy.csv")
    reader = csv.reader(file)
    BoilerError.objects.all().delete()
    BoilerModel.objects.all().delete()
    BoilerBrand.objects.all().delete()
    for row in reader:
        print(row)
        a, created = BoilerBrand.objects.get_or_create(BrandName=ImportBrandName)
        b, created = BoilerModel.objects.get_or_create(ModelName=row[2])
        c, created = BoilerModel.objects.get_or_create(ModelBrand=ImportBrandName)
        d, created = BoilerError.objects.get_or_create(BoilerBrand=ImportBrandName)
        e, created = BoilerError.objects.get_or_create(ErrorCode=row[0])
        f, created = BoilerError.objects.get_or_create(ErrorDesc=row[1])
        g, created = BoilerError.objects.get_or_create(ModelName="Contact a Technician")

这是我正在使用的 CSV 示例:

200 O ,锅炉处于加热模式 , Greenstar 8000 锅炉

201 O ,热水模式锅炉 , Greenstar 8000 锅炉

【问题讨论】:

    标签: python django csv django-models django-rest-framework


    【解决方案1】:

    而不是

    b, created = BoilerModel.objects.get_or_create(ModelName=row[2])
    c, created = BoilerModel.objects.get_or_create(ModelBrand=ImportBrandName)
    

    使用

    b, created = BoilerModel.objects.get_or_create(ModelName=row[2], ModelBrand=a)
    

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 2021-01-01
      • 2017-10-21
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多