УНИКАЛЬНОЕ ограничение не выполнено Ошибка при сохранении нового объекта в Django - PullRequest
2 голосов
/ 22 мая 2019

У меня есть эта модель:

#models.py
class Enrollment(models.Model):
    student = models.ForeignKey(User, on_delete=models.PROTECT)
    curriculum = models.ForeignKey(Curriculum, on_delete=models.PROTECT)
    enrolment_date = models.DateTimeField(null=True,blank=True,auto_now_add=True)
    payed_amount = models.PositiveIntegerField(null=True,blank=True)
    is_complete_paid = models.BooleanField(null=True,blank=True,default=False)

    class Meta:
        unique_together = (("student", "curriculum"),)

и когда я хочу создать новую регистрацию в моем views.py с этими кодами:

new_enrollment = Enrollment.objects.create(student_id=request.user.id,curriculum_id=curriculum_id)

Я получил эту ошибку:

Сбой уникального ограничения: lms_enrollment.student_id, lms_enrollment.curriculum_id

Почему произошла эта ошибка? Можно ли объяснить причину этой ошибки и представить некоторые документы об этом?

1 Ответ

2 голосов
/ 22 мая 2019
class Enrollment(models.Model):
    student = models.ForeignKey(User, on_delete=models.PROTECT)
    curriculum = models.ForeignKey(Curriculum, on_delete=models.PROTECT)
    payed_amount = models.PositiveIntegerField(null=True, blank=True)

    class Meta:
        unique_together = (("student", "curriculum"),)

Meta.unique_together означает, что оба поля не могут быть одинаковыми для более чем одного элемента в базе данных

Enrollment.objects.create(student=student1, curriculum=curriculum1, payed_amount=100)
Enrollment.objects.create(student=student2, curriculum=curriculum1, payed_amount=200)
#Only curriculum is the same
Enrollment.objects.create(student=student1, curriculum=curriculum2, payed_amount=300)
#Only student is the same
Enrollment.objects.create(student=student1, curriculum=curriculum1, payed_amount=400)
#Both student and curriculum is the same with the first object,
hence it raises UNIQUE constraint failed error
...