Hi Mikhail,

On Apr 24, 7:46 am, Mikhail Korobov <kmik...@googlemail.com> wrote:
> The issue is not only with unique_together indeed. Please correct me if I'm
> wrong, but it seems there is no way currently to use model validation with
> fields dependent on each other when one of these fields is not POSTed
> directly by user. Example:
>
> # models.py
> class Ticket(models.Model):
>     created_by = models.ForeignKey(User, related_name='created_tickets')
>     responsible = models.ForeignKey(User, related_name='todo')
>
>     def clean():
>         # we don't want to allow tickets where created_by == responsible for
> some reason
>         from django.core.exceptions import ValidationError
>         if self.created_by == self.responsible:  
>             raise ValidationError('Responsible is incorrect.')
>
> # views.py
> class TicketForm(forms.ModelForm):
>     class Meta:
>         model = Ticket
>         exclude = ['created_by']
>
> @login_required
> def add_ticket(request):
>     form = TicketForm(request.POST or None)
>     if form.is_valid():
>         ticket = form.save(commit=False)
>         ticket.created_by = request.user
>
>         # todo: handle ticket.full_clean()
>
>         ticket.save()
>         return redirect('ticket_list')
>     return TemplateResponse(request, 'tickets/add.html', {'form': form})
>
> Model.clean method is always called on form validation (unlike field
> validators that are excluded if field is excluded from form). And we can't
> write validator for 'responsible' field or for 'created_by' field (so that
> it will be excluded from validation on form.is_valid) because this validator
> won't have an access to other model fields. So the only option here seems to
> move validation from model level to form level.
>
> Please consider this use case while rethinking model validation. The
> proposed context manager seems to be a very good idea and I hope it will fix
> this issue as well.

Sorry, I missed this somehow earlier. I agree with you that this is
another example of why attempting to do partial model validation is
simply broken. I think the context manager proposal (which I've posted
in a new thread) does fix this case as well, and I'd be happy for your
comments on it.

Carl

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to