def data_mapping_new(request):
company = get_current_logged_in_company(request)
if request.method == "POST":
form = DataMapForm(request.POST or None)
if form.is_valid():
category = form.save(commit=False)
category.company = company
if form.is_valid():
form.save()
У меня есть аналогичная настройка для другой модели, которая работает нормально, но эта просто вызывает ошибку django.db.utils.IntegrityError: повторяющееся значение ключа нарушает уникальное ограничение «unique_data_map_both_none»
Не следует ли сначала проверить ограничение, если form.is_valid():
Что мне не хватает здесь?
РЕДАКТИРОВАТЬ:
Я использовал аналогичный шаблон для модели где-то еще, и там он работает нормально, с той лишь разницей, что условие находится в поле char, а не во внешнем ключе, как в этой модели. условие=Q(email__isnull=False) & Q(email__gt=''). Может быть, моя проблема в том, как я настроил условие?
У меня есть эта модель: [code]class DataMapping(models.Model): company = models.ForeignKey(Company, on_delete=models.CASCADE) location = models.ForeignKey(Location, null=True, blank=True, on_delete=models.CASCADE) department = models.ForeignKey(LocationDepartment, null=True, blank=True, on_delete=models.CASCADE) category = models.ForeignKey(CompanyCategory, on_delete=models.CASCADE) reason = models.ForeignKey(ReasonForProcessing, on_delete=models.CASCADE)
class Meta: constraints = [ UniqueConstraint( name='unique_data_map', fields=['company', 'location', 'department', 'category', 'reason'], condition=Q(location__isnull=False), violation_error_message="This data map has already been added.", ), UniqueConstraint( name='unique_data_map_both_none_dep_none', fields=['company', 'location', 'category', 'reason'], condition=Q(department__isnull=True), violation_error_message="This data map has already been added." ), UniqueConstraint( name='unique_data_map_both_none', fields=['company', 'category', 'reason'], condition=Q(location__isnull=True) & Q(department__isnull=True), violation_error_message="This data map has already been added." ) ] [/code] с базовой формой модели [code]class DataMapForm(forms.ModelForm): class Meta: model = DataMapping fields = ( 'location', 'department', 'category', 'reason', ) widgets = { 'company': forms.HiddenInput() } [/code] и вид: [code]def data_mapping_new(request): company = get_current_logged_in_company(request)
if request.method == "POST": form = DataMapForm(request.POST or None) if form.is_valid(): category = form.save(commit=False) category.company = company if form.is_valid(): form.save() [/code] У меня есть аналогичная настройка для другой модели, которая работает нормально, но эта просто вызывает ошибку django.db.utils.IntegrityError: повторяющееся значение ключа нарушает уникальное ограничение «unique_data_map_both_none» Не следует ли сначала проверить ограничение, если form.is_valid(): Что мне не хватает здесь? РЕДАКТИРОВАТЬ: Я использовал аналогичный шаблон для модели где-то еще, и там он работает нормально, с той лишь разницей, что условие находится в поле char, а не во внешнем ключе, как в этой модели. условие=Q(email__isnull=False) & Q(email__gt=''). Может быть, моя проблема в том, как я настроил условие?