решение от @sttwister является правильным, но может быть упрощено.
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
exclude = ['problem']
def clean(self):
cleaned_data = self.cleaned_data
if Solution.objects.filter(name=cleaned_data['name'],
problem=self.problem).exists():
raise ValidationError(
'Solution with this Name already exists for this problem')
# Always return cleaned_data
return cleaned_data
В качестве бонуса вы не возвращаете объект в случае дублирования, а только проверяете, существует ли он в базе данных, экономя немного бит исполнений.