Django IntegrityError: UNIQUE constraint failed: pu_limity.zakazka_id

Я получаю следующую ошибку, когда пытаюсь импортировать файл csv и сохранить данные в базе данных:

IntegrityError at /limity/limity_csv_import
UNIQUE constraint failed: pu_limity.zakazka_id

models.py

class Limity(models.Model):

    zakazka = models.ForeignKey(Zakazky, on_delete=models.CASCADE)
    p_el = models.DecimalField("E/L", decimal_places=2, max_digits=4, null=True, blank=True)
    p_ml = models.DecimalField("M/L", max_digits=6, decimal_places=4, null=True, blank=True)
    p_prispevek = models.DecimalField("Příspěvek", max_digits=10, decimal_places=2, null=True, blank=True)
    p_pu = models.DecimalField("PU", max_digits=10, decimal_places=2, null=True, blank=True)
    aktualizace = models.DateTimeField(auto_now=True, null=True)


    @classmethod
    def create_from_csv_line(cls, line):
       l = Limity()

        try:
            l.zakazka = Zakazky.objects.get(kod=line["Zakazka"])
        except Zakazky.DoesNotExist:
            print(line["Zakazka"])
            l.zakazka, _ = Zakazky.objects.get_or_create(kod=line["Zakazka"])
        except:
            print(line["Zakazka"])

        l.p_el = line["EL"]
        l.p_ml = line["ML"]
        l.p_prispevek = line["Prispevek"]
        l.p_pu = line["PU"]

        l.save()

views.py

class LimityCSVImportView(LoginRequiredMixin, SuccessMessageMixin, FormView):
    template_name = "limity/limity_csv_import.html"
    form_class = LimityCSVForm

    def test_func(self):
        return self.request.user.is_superuser

    def post(self, request, *args, **kwargs):
        form: LimityCSVForm = LimityCSVForm(request.POST, request.FILES)
        if form.is_valid():
            csv_file = form.cleaned_data["uploaded_file"]  
            decoded_file = csv_file.read().decode('utf-8-sig')
            io_string = io.StringIO(decoded_file)
            reader = csv.DictReader(io_string, delimiter=",", skipinitialspace=True) 
            record_count = 0
            for line in reader: 
                Limity.create_from_csv_line(line=line)
                record_count += 1
            context = self.get_context_data()
            my_text = ' nových limitů vloženo.'
            messages.success(request, str(record_count) + my_text)
            return render(request, self.template_name, context)
        else:
            return self.form_invalid(form)

Ошибка возникает при сохранении данных из формы в строке l.save()

Я нашел несколько ответов на эту ошибку и попробовал в @classmethod:

        el = (line["EL"])
        if not el:
            l.p_el = 0
        else:
            l.p_el = el

Но затем я получаю другую ошибку:

ValidationError at /limity/limity_csv_import
['“” value must be a decimal number.']

И я не получаю эту ошибку, так как все значения в csv-файле являются числами: enter image description here

Есть идеи, что я должен сделать, чтобы включить этот импорт данных? Я также кое-что забыл о локализации, я привык к английским форматам, но для этого приложения я использую локализацию cs-cz, так что если проблема в этом, что мне с этим делать?

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