0

It worked earlier, i received this one after running the import etc. Do you know why i got this? How should i change my models. i recall that Django is doing authomaticaly the foreign key in the backend. Can you please advise how is better to do this? The DB exists, the model exists, i did the migrations and migrate also.

These are my models:

from __future__ import unicode_literals
from django.db import models
# from django.core.urlresolvers import reverse
from django.urls import reverse
# Create your models here.



class Ofac_Sdn(models.Model):
    number = models.IntegerField(blank=True, null=True)
    name = models.CharField(max_length=200, null=True)
    b_i = models.CharField(max_length=250, null=True)
    programe= models.CharField(max_length=250, null=True)
    more_info = models.CharField(max_length=250, null=True)
    vessel_call_sign = models.CharField(max_length=250, null=True)
    vessel_type= models.CharField(max_length=250, null=True)
    vessel_dwt = models.IntegerField(blank=True, null=True)
    # vessel_dwt = models.CharField(max_length=250,blank=True, null=True)
    tonnage = models.IntegerField(blank=True, null=True)
    vessel_flag = models.CharField(max_length=250, null=True)
    vessel_owner= models.CharField(max_length=250, null=True)
    dob_aka= models.CharField(max_length=250, null=True)
    date_of_creation = models.DateTimeField(max_length=250, auto_now=True,blank=True, null=True)
    publish_date = models.DateTimeField(max_length=250, auto_now_add=True,blank=True, null=True)
    #content = models.TextField(blank=True, null=True, default="")
    class Meta:
        verbose_name_plural = "ofac_sdn"
    def __str__(self):
        return ((self.number,  self.name,  self.programe))

class Ofac_Add(models.Model):
    number = models.ForeignKey(Ofac_Sdn, on_delete=models.CASCADE)
    n= models.IntegerField(blank=True, null=True)
    adresa = models.CharField(max_length=250, null=True)
    oras_zip = models.CharField(max_length=250, null=True)
    stat = models.CharField(max_length=250, null=True)
    ceva = models.CharField(max_length=250, null=True)
    date_of_creation = models.DateTimeField(max_length=250, auto_now=True,blank=True, null=True)
    publish_date = models.DateTimeField(max_length=250, auto_now_add=True,blank=True, null=True)
    class Meta:
        verbose_name_plural = "ofac_add"
    def __str__(self):
        return ((self.number_id, self.adresa ,  self.oras_zip, self.stat, self.ceva))

class Ofac_Alt(models.Model):
    number = models.ForeignKey(Ofac_Sdn, on_delete=models.CASCADE)
    ceva = models.CharField(max_length=500, null=True)
    aka = models.CharField(max_length=500, null=True)
    name_of_aka = models.CharField(max_length=500, null=True)
    a = models.CharField(max_length=250, null=True)
    date_of_creation = models.DateTimeField(max_length=250, auto_now=True,blank=True, null=True)
    publish_date = models.DateTimeField(max_length=250, auto_now_add=True,blank=True, null=True)
    class Meta:
        verbose_name_plural = "ofac_alt"
    def __str__(self):
        return ((self.number_id,  self.aka, self.name_of_aka))

class Ofac_Sdn_Comments(models.Model):
    number = models.ForeignKey(Ofac_Sdn, on_delete=models.CASCADE)
    more_info = models.CharField(max_length=1000, null=True)
    date_of_creation = models.DateTimeField(max_length=250, auto_now=True,blank=True, null=True)
    publish_date = models.DateTimeField(max_length=250, auto_now_add=True,blank=True, null=True)
    class Meta:
        verbose_name_plural = "ofac_sdn_comments"
    def __str__(self):
        return ((self.number_id, self.more_info))

Importing code:

import csv, sys, os

# project_dir = "/Users/cohen/my-python-project/venv/ofac/ofac_project/ofac_sdn/import_save/"
# project_dir = "/Users/Dropbox/ofac_project/ofac_sdn/import_save/" project_dir = "/Users/Dropbox/ofac_project" sys.path.append(project_dir) os.environ['DJANGO_SETTINGS_MODULE']='ofac.settings'

import django django.setup()

from ofac_sdn.models import Ofac_Sdn from ofac_sdn.models import Ofac_Add from ofac_sdn.models import Ofac_Alt from ofac_sdn.models import Ofac_Sdn_Comments


file    = 'new_sdn.csv' file1   = 'new_add.csv' file2   ='new_alt.csv' file3   ='new_sdn_comments.csv'

data = csv.reader(open(file),delimiter=",") for row in data:
    if row[0] !="Number":
        post = Ofac_Sdn()
        post.number = row[0]
        post.name = row[1]
        post.b_i=row[2]
        post.programe=row[3]
        post.more_info=row[4]
        post.vessel_call_sign=row[5]
        post.vessel_type=row[6]
        post.vessel_dwt=row[7]
        # post.vessel_dwt=int(''.join(row[7].split(',')))
        post.tonnage=row[8]
        post.vessel_flag=row[9]
        post.vessel_owner=row[10]
        post.dob_aka=row[11]
        post.save()

data1 = csv.reader(open(file1),delimiter=",") for row in data1:
    if row[0] !="Number":
        post = Ofac_Add()
        post.number_id = row[0]  #am pus un _id la foreign key k asa stokeaza django foreign key-ul
        post.n = row[1]
        post.adresa=row[2]
        post.oras=row[3]
        post.stat=row[4]
        post.s=row[5]
        post.save()

data2 = csv.reader(open(file2),delimiter=",") for row in data2:
    if row[0] !="Number":
        post = Ofac_Alt()
        post.number_id = row[0]
        post.ceva = row[1]
        post.aka=row[2]
        post.name_of_aka=row[3]
        post.a=row[4]
        post.save()

data3 = csv.reader(open(file3),delimiter=",") for row in data3:
    if row[0] !="Number":
        post = Ofac_Sdn_Comments()
        post.number_id = row[0]
        post.more_info = row[1]
        post.save()

The error:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit
    return self.connection.commit()
sqlite3.IntegrityError: FOREIGN KEY constraint failed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/Dropbox/ofac_project/ofac_sdn/import_save/import_all_sdn.py", line 52, in <module>
    post.save()
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 729, in save
    force_update=force_update, update_fields=update_fields)
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 759, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/usr/local/lib/python3.6/site-packages/django/db/transaction.py", line 212, in __exit__
    connection.commit()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 261, in commit
    self._commit()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit
    return self.connection.commit()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed

1 Answer 1

1

The problem is with the following lines:

data = csv.reader(open(file),delimiter=",") for row in data:
    if row[0] !="Number":
        post = Ofac_Sdn()
        post.number = row[0]

and

data1 = csv.reader(open(file1),delimiter=",") for row in data1:
    if row[0] !="Number":
        post = Ofac_Add()
        post.number_id = row[0]  

The post number_id value should refer to the primary key on on the Ofac_Sdn column; however, you're not setting the Ofac_Sdn.id primary key explicitly. If you update the first loop as follows:

data = csv.reader(open(file),delimiter=",") for row in data:
    if row[0] !="Number":
        post = Ofac_Sdn()
        post.id = row[0]
        post.number = row[0]

That will most likely fix it.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.