Django-通过csv导入用foreignkey填充模型?

时间:2018-12-19 22:33:52

标签: django csv

我试图设置一个要用csv文件填充的模型,并使用其中一个字段作为外键:

首先,我尝试使用inspectdb在现有的postgresql表中创建模型,进行迁移,然后将要关联的字段类型从charfield更改为Foreignkey,但是出现错误

然后我尝试创建一个带有inspectdb描述的空模型,然后在postgresql中导入一个csv,最后将我想要的字段更改为Foreignkey。在管理站点中,我可以查看导入的数据和关系,但是当我查询模型时,foreignkey字段又出现了另一个错误,它不会让我迁移(无法识别charfield,它要求输入整数)

-我想要一个外键的csv列是charfield,当我在导入csv之前创建模型时遇到错误,然后检查postgres表中的数据类型是否为整数,可以将其设置为charfield吗? / p>

哪种工作流程最适合将csv导入模型并将字段之一用作外键(charfield类型)?

谢谢

这是要关联的模型:

class D_Roles(models.Model):
    predio = models.CharField(max_length=254)
    dest = models.CharField(max_length=254)
    dir = models.CharField(max_length=254)
    rol = models.CharField(max_length=254)
    vlr_tot = models.FloatField()
    ub_x2 = models.FloatField()
    ub_y2 = models.FloatField()
    instrum = models.CharField(max_length=254)
    codzona = models.CharField(max_length=254)
    nomzona = models.CharField(max_length=254)
    geom = models.MultiPointField(srid=32719)

    def __str__(self):
        return self.rol

    class Meta():
        verbose_name_plural = "Roles SII"

我要使用csv填充的模型:

class Dom2015CertInf(models.Model):
    id = models.CharField(primary_key=True, max_length=80)
    nombre_archivo = models.CharField(max_length=180, blank=True, null=True)
    derechos = models.CharField(max_length=120, blank=True, null=True)
    dir_calle = models.CharField(max_length=120, blank=True, null=True)
    dir_numero = models.CharField(max_length=120, blank=True, null=True)
    fecha_certificado = models.CharField(max_length=50, blank=True, null=True)
    numero_certificado = models.CharField(max_length=50, blank=True, null=True)
    numero_solicitud = models.CharField(max_length=50, blank=True, null=True)
    #Original field from inspectdb
    #rol_sii = models.CharField(max_length=50, blank=True, null=True)
    #FOREIGNKEY Changed after creating the model and importing the csv
    rol_sii = models.ForeignKey(D_Roles, db_column='rol_sii', on_delete=models.CASCADE, default=0)
    zona_prc = models.CharField(max_length=120, blank=True, null=True)

    def __str__(self):
        return str(self.numero_certificado)

    class Meta:
        managed = True
        verbose_name_plural = "2015 Certificados Informaciones Previas"
        ordering = ['numero_certificado']

0 个答案:

没有答案