Я пытаюсь сохранить данные формы в таблице postgres «Student_Events», которая связана через внешний ключ с таблицей «Student_INFO», но продолжает получать ошибку целостности:

'вставка или обновление в таблице «entry_student_event» нарушает ограничение внешнего ключа «entry_student_event_nsn_id_2499e7fd_fk_entry_student_info_id» ПОДРОБНЕЕ: Ключ (nsn_id) = (123556789) отсутствует в таблице «entry_student_info».

В Student_INFO есть один студент, у которого есть nsn '123556789', поэтому я не уверен, почему его «нет» в этой таблице. Любая помощь будет принята с благодарностью, поскольку я новичок в Django и PostgresSQL, спасибо

Views.py :

def Grouplist(request):
    student_list = Student_INFO.objects.order_by('name')
    
    for student in student_list:
        if request.method == 'POST':
            form = EntryForm(request.POST)
            context = {
                'student_list':student_list, 
                'form': form
            }
            if form.is_valid(): 
                event_save = form.save(commit=False)
                event_save.nsn_id = student.nsn
                event_save.save()
                return redirect('grouplist')      
        else:
            form = EntryForm()
            context = {
                'student_list':student_list, 
                'form': form
            }
    return render(request, 'grouplist.html', context)

Models.py :

class Student_INFO(models.Model):
    nsn = models.IntegerField(blank = False)
    birthdate = models.DateField("BirthDate", blank = False)
    name = models.CharField(max_length=30, blank = False)
    age_catagory = models.CharField(max_length=8, blank = True, default = '')
    grouproom = models.CharField(max_length=3, blank = False)
    year_lvl = models.IntegerField(blank = False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name


class Student_Event(models.Model):
    nsn = models.ForeignKey(Student_INFO, on_delete=models.CASCADE)
    event1 = models.CharField(max_length=15, blank=False, default = '')
    event2 = models.CharField(max_length=15, blank=False, default = '')
    event3 = models.CharField(max_length=15, blank=False, default = '')
    event4 = models.CharField(max_length=15, blank=False, default = '')
    event5 = models.CharField(max_length=15, blank=False, default = '')
    event6 = models.CharField(max_length=15, blank=False, default = '')
                                                                        
    def __str__(self):
        return self.nsn

Forms.py

class EntryForm(forms.ModelForm):
    class Meta:
        model= Student_Event
        fields= ["event1", "event2", "event3", "event4", "event5", "event6"]
        widgets = {
            'event1':forms.Select(choices=EVENT_CHOICES),
            'event2':forms.Select(choices=EVENT_CHOICES),
            'event3':forms.Select(choices=EVENT_CHOICES),
            'event4':forms.Select(choices=EVENT_CHOICES),
            'event5':forms.Select(choices=EVENT_CHOICES),
            'event6':forms.Select(choices=OPEN_CHOICES),
            }

Возвращает ошибку:

insert or update on table "entry_student_event" violates foreign key constraint "entry_student_event_nsn_id_2499e7fd_fk_entry_student_info_id"
DETAIL:  Key (nsn_id)=(123556789) is not present in table "entry_student_info".
2
Armata 10 Окт 2019 в 11:37

1 ответ

Лучший ответ

Спасибо @BearBrown за решение! student.nsn должно быть student.pk.

1
Armata 11 Окт 2019 в 04:18