1

I do:

I define UniqueConstraint (also try with 'unique_together') in model:

class Project(models.Model):
    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['company', 'name'], name="unique_project_name_in_company"
            )
        ]

    name = models.CharField(blank=False, max_length=256)

    company = models.ForeignKey(
        Company,
        on_delete=models.CASCADE
    )

I set company in form_valid in view (I think it's reason of my problem):

class ProjectCreateView(LoginRequiredMixin, generic.CreateView):
    model = Project
    form_class = ProjectForm
    
    def form_valid(self, form):
        form.instance.company = self.request.user.company
        return super().form_valid(form)

I try define message for 'unique_project_name_in_company' in form:

class ProjectForm(forms.ModelForm):
    model = Project

    class Meta:
        model = Project
        fields = ['name']

        error_messages = {
            NON_FIELD_ERRORS: {
                'unique_project_name_in_company': "Name isn't unique!",
            }
        }

Unexpected behavior

If I submit form with non-unique pair (inputed non-unique name) I want get my custom error_message but I get: 500 IntegrityError UNIQUE constraint failed: company_id, name

0 Answers0