1
변수 foo가 MyModel 및 Item에 대해 m2m으로 추가되기 전에 동일하다는 것을 확인하려고합니다. 관리자가 아니라면 ValidationError를 발생시키고 싶습니다.django에서 m2m_changed 신호의 유효성 검사 오류가 표시됩니다.
models.py
class Item(models.Model):
foo = models.CharField(max_length=200)
class MyModel(models.Model):
foo = models.CharField(max_length=200)
items = models.ManyToManyField(Item)
signals.py
@receiver(m2m_changed, sender=MyModel.items.through)
def my_validator(sender, instance, action, pk_set, **kwargs):
if action == 'pre_add':
if Item.objects.filter(id__in=pk_set, foo=instance.foo).count() != len(pk_set):
raise ValidationError({'items': ["Foo doesn't match"]})
은 ValidationError가 500 오류로 적절히 관리 및하지 표시 할 수있는 방법이 있습니까.
MyModel의 clean 메소드를 사용하여 foo와 동일한 값을 검증하는 솔루션을 찾을 수 없었습니다. 모든 조언을 부탁드립니다.
당신을 감사합니다! ModelForm을 만들고 거기에서 검증함으로써 트릭을 만들었습니다. 그러나 pk_set을 self.cleaned_data.get ("items")으로 설정했습니다. 왜 Item.objects.all()을 사용하는지 잘 모르겠습니다. 다시 한 번 감사드립니다! – Maxim
@Maxim 필자가 저장하고 사용하기를 원하는 pk_set이 정확히 무엇인지 알지 못했기 때문에 Item 테이블의'pk' 값이 될 것이므로'Item.object.all()'이라고 생각했습니다. 어쨌든, 당신은 환영합니다. :) –
걱정하지 않아도, 실제 유효성 확인 논리는 실제로 적합하지 않습니다. 도와 주셔서 감사합니다. 나에게 시간의 좋은 덩어리를 구해줬다! 건배 – Maxim