Импорт и экспорт пакета Django Проблема импорта CSV-файла с внешним ключом

Я пытаюсь импортировать оценки для данных о студентах и продолжаю получать сообщение об ошибке, что запрос не соответствует импорту. Я пытался указать импорту, чтобы он рассматривал поле state_province в качестве внешнего ключа, но мне кажется, что я неправильно его написал. Во-вторых, по какой-то причине в поле date не работает ограничение null, и я не понимаю, почему, поскольку данные в файле excel имеют правильный формат. Я установил в модели null=true, чтобы пока обойти.Вот мой код. Буду признателен за помощь. Спасибо

STUDENT MODEL

# Where Basic Student Data Is Stored 
class Student(models.Model):
    studentpsid= models.CharField(primary_key = True , default = "", max_length = 50, unique = True)
    student_name = models.CharField(max_length = 50)
    first_name = models.CharField(max_length = 50, default = "")
    last_name = models.CharField(max_length = 50,default = "")
    gender = models.CharField(max_length = 1,default = "")
    birth_date = models.DateField(blank= True)
    student_grade = models.CharField(max_length = 2, default = "")
    home_room = models.CharField(max_length = 5, default = "")
    student_enrollment = models.CharField(max_length = 2, default = "")
    school_number = models.CharField(max_length = 15, default = "") 
    email = models.EmailField(default = "")
    projected_graduation_year = models.CharField(max_length = 4, default = "")
    counseling_goal = models.TextField(max_length = 500, blank = True)
    win_username = models.CharField(max_length = 50, blank=True)
    win_password = models.CharField(max_length = 50, blank=True)
    offsite_laptop = models.BooleanField(default = False, blank = True)
    state_province_id = models.CharField(max_length = 50, default = "", unique=True)
    lunch_balance = models.FloatField(blank = True, default = 0)
    race = models.CharField(max_length = 1, blank = True)
    alert_medical = models.TextField(max_length = 500, blank =True)
    district_code = models.ForeignKey(NJDistictCodes,on_delete = models.PROTECT, blank = True, default = 0)
    image = models.ImageField(default ="default.png", upload_to ='student_pics')

TEST SCORE MODEL

class MindPrint(models.Model):
     state_province = models.ForeignKey(Student, to_field="state_province_id" ,on_delete = models.CASCADE, default = "") 
     test_date = models.DateField(null=True)
     reasoning_verbal = models.CharField(max_length = 1, default = 0, blank = True)
     reasoning_spatial = models.CharField(max_length = 1, default = 0, blank = True)
     reasoning_abstract = models.CharField(max_length = 1, default = 0, blank = True)
     executive_flexibility = models.CharField(max_length = 1, default = 0, blank = True)
     executive_working_memory = models.CharField(max_length = 1, default = 0, blank = True)
     executive_attention = models.CharField(max_length = 1, default = 0, blank = True)
     speed_processing = models.CharField(max_length = 1, default = 0, blank = True)
     speed_visual_motor = models.CharField(max_length = 1, default = 0, blank = True)
     memory_verbal = models.CharField(max_length = 1, default = 0, blank = True)
     memory_visual = models.CharField(max_length = 1, default = 0, blank = True)

     class Meta:
             verbose_name_plural = "Mind Print"
    
     def __str__(self):
        return str(self.state_province)

Вот мои настройки файла Admin.py.

from inspect import Attribute
from django.contrib import admin
from import_export.admin import ImportExportActionModelAdmin
from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget
from .models import Student, MindPrint

class MindPrintResource (resources.ModelResource):
    class Meta:
      model = MindPrint
      import_id_fields = ('state_province',)
      state_province = fields.Field(column_name='state_province', attribute='state_province',widget=ForeignKeyWidget(Student, 'state_province_id'))
      fields = ('state_province','test_date','reasoning_verbal','reasoning_spatial','reasoning_abstract','executive_flexibility','executive_working_memory',
      'executive_attention','speed_processing','speed_visual_motor','memory_verbal','memory_visual')  
     

class MindPrintAdmin (ImportExportActionModelAdmin):   
     resource_class = MindPrintResource
     list_display = ('state_province_id','student_name','test_date','reasoning_verbal','reasoning_spatial','reasoning_abstract','executive_flexibility','executive_working_memory',
     'executive_attention','speed_processing','speed_visual_motor','memory_verbal','memory_visual') 

     def student_name(self,obj):
           return obj.state_province.student_name

admin.site.register(MindPrint,MindPrintAdmin) 

Вот скриншот ошибки при импорте.

enter image description here

Вы не можете установить default = "" в ForeignKey. Он не найдет объект Student с "" в качестве первичного ключа. Вы можете установить его в default = None, но тогда вам, возможно, придется установить также null = True.

Вы настроили импорт объекта модели MindPrint. При импорте исходного файла данных ожидается наличие поля state_province, которое является FK-ссылкой на модель Student. Поскольку это FK-отношение, процесс импорта ожидает, что эта ссылка существует. В вашем случае ресурс Student с state_province из 1234567899 не существует, и поэтому вы видите ошибку Student.DoesNotExist.

Существует несколько API-хуков, которые можно использовать для проверки отсутствия Student строк и создания их, если они не существуют. Или вы можете переопределить ForeignKeyWidget, чтобы создать ресурс перед поиском.

Вернуться на верх