2017-03-13 20 views
0

ValidationErrorを定義しました。それはうまく動作しますが、フォームを更新しようとすると、それが発生します。このため私は自分のフォームをもう更新することができません。これは、次のように定義されます。更新時にValidationErrorが発生する

def clean_examination(self): 
    new_exa = self.cleaned_data.get('examination') 
    try: 
     old_exa=GeneralData.objects.get(examination=self.cleaned_data.get('examination')) 
    except GeneralData.DoesNotExist: 
     return new_exa 
    if old_exa: 
     raise forms.ValidationError('Object with this examination already exists!') 
    return new_exa` 

は、フォームが更新されるべきであるならば、私のValidationErrorを「無効化」することが可能ですか?

追加情報: マイモデル:

class GeneralData(models.Model): 
    examination = models.ForeignKey(Examination, on_delete=models.CASCADE, help_text='This value is pasted in automatically and is not editable!') 
    attr1= models.FloatField() 
    attr2= models.FloatField() 

マイUpdateView:

class GeneralDataUpdate(LoginRequiredMixin, generic.UpdateView): 
    model = GeneralData 
    form_class = GeneralDataCreateForm 
    template_name_suffix = '_update_form' 
    login_url = 'member:login' 

    def get_success_url(self): 
     return reverse('member:detail', kwargs={'pk': self.get_object().examination.patient_id}) 

    def get_context_data(self, **kwargs): 
     context = super(GeneralDataUpdate, self).get_context_data(**kwargs) 
     context['action'] = reverse('member:generaldata-update', 
            kwargs={'pk': self.get_object().id}) 
     return context 

マイアップデート-URL:

​​

答えて

1

フォームは、タイプModelFormからのものである場合、あなたは属性はself.instanceです。その後、self.instance.idが設定されているかどうかを確認し、検証を処理できます。

if self.instance.id: 
    # raise ValidationError 

これを使用していない場合は、要求と共に送信するIDを消去する必要があります。それが存在する場合はValidationErrorを投げ、または継続...

id = self.cleaned_data.get('id', None) 
if id: 
    # raise ValidationError 

例:何の古いオブジェクトが存在しない場合は、古いexaminationがある場合には、このような状況で

def clean_examination(self): 
    new_exa = self.cleaned_data.get('examination') 
    try: 
     old_exa = GeneralData.objects.get(
      examination=self.cleaned_data.get('examination')) 
    except GeneralData.DoesNotExist: 
     return new_exa 

    if old_exa: 
     if not self.instance.id: 
      raise forms.ValidationError(
       'Object with this examination already exists!') 
    return new_exa 

ValidationErrorにのみ発生します。

オブジェクトにidがある場合は、すでにOTHERのidで存在する名前を変更すると、同じ検査で2つの異なるオブジェクトが表示されます。それが大丈夫かどうかは分かりませんが、それはもちろんあなた次第です。

+0

これは完璧に機能します!どうもありがとうございます! – Boerne

関連する問題