django - Dajngo インライン フォームセットと必須フィールドのエラー

okwaves2024-01-25  8

これは私のモデルです:

class dateEvent(models.Model):

    venue = models.ForeignKey(Venue, on_delete=models.CASCADE)
    event = models.ForeignKey('Event', on_delete=models.CASCADE)
    start_date_time = models.DateTimeField(auto_now=False, auto_now_add=False)

私の views.py:

def event_edit_view(request, id):
    event = get_object_or_404(Event, id=id)
    #MyOtherForm instantiated by event
    DateEventFormSet = inlineformset_factory(Event, dateEvent, extra=5, can_delete=True, fields=('event', 'start_date_time', 'venue', 'link', 'link_description'),
    widgets={
    'venue': s2forms.Select2Widget(),
    'start_date_time': CalendarWidget(),
    form_date_event = DateEventFormSet(request.POST or None, instance=Event.objects.get(id=id), prefix="dateEvent", queryset=dateEvent.objects.filter(event__id=id))

    if request.method == "POST":

        if MyOtherForm.is_valid() and form_date_event.is_valid():

            MyOtherForm.save()
            form_date_event.save()
            return redirect('my-events')

        else:
            raise forms.ValidationError(form_date_event.errors) #?

    context = {
        [other forms...]
        'form_date_event': form_date_event,
        }

    return render(request, "events/template.html", context)

そして私の template.html:

<table id="dateEvent">
        <thead>
        <th>Venue</th>
        <th>Date and time</th>
        <th>Link</th>
        <th>Link description</th>
        </thead>
        <tbody id='date_body'>
          {{ form_date_event.management_form }}
          {% for formDate in form_date_event.forms %}

         <tr class="form-row-dateEvent" style='display:table-row;'>
            <td>{{formDate.venue}}<br>
            <a href="javascript:void(0)" data-open="addVenue" onclick="sessionStorage.setItem('venueField', 'id_dateEvent-{{forloop.counter0}}-venue'); document.getElementById('addVenueForm').reset(); document.getElementById('errorVenue').innerText = '';">Add a new venue</a></td>
            <td>{{ formDate.start_date_time}}</td>
            <td>{{formDate.link}} {{formDate.this_composition}}</td>
            <td>{{formDate.id}}{{formDate.link_description}}</td>
         </tr>
    {% endfor %}
    </tbody>
    </table>

では、ユーザーに会場と日付の両方を入力させるにはどうすればよいでしょうか?現在のように、ユーザーが会場フィールドに入力し、対応する日付フィールドを空のままにすると、Django はユーザーを醜い黄色のページにリダイレクトします。

ValidationError at /private/event-edit/1150/

['This field is required.']

Request Method:     POST
Request URL:    .../event-edit/1150/
Django Version:     3.1
Exception Type:     ValidationError
Exception Value:    

['This field is required.']

Exception Location:     /home/.../.../.../views.py, line 682, in event_edit_view

DEBUG=TRUE が設定されている場合は、それ以外の場合はさらに醜いエラー 500 が発生します。ユーザーがフィールドに入力したときに、入力された会場フィールドの隣の同じ行に「このフィールドに入力してください」という素敵なメッセージを表示する方法はありますか? 「送信」ボタンは?

追伸

レコードに会場がある場合は、日付も入力する必要があるというカスタムの clear() メソッドを宣言する必要がありますか?



------------------------

views.py ファイル内のevent_edit_view関数内に問題があると思います。POSTメソッド条件内のコンテキストでフォームセットを渡す必要があります。 検証エラーを発生させる代わりに、else 部分でこれを実行してください。これで動作するはずです。

def event_edit_view(request, id):
    .....
    if request.method == "POST":
         .....
    if MyOtherForm.is_valid() and form_date_event.is_valid():

        MyOtherForm.save()
        form_date_event.save()
        return redirect('my-events')

    else:
       context = {
           [other forms...]
           'form_date_event': form_date_event,
      }

      return render(request, "events/template.html", context)

新着記事:
html - ブートストラップのモーダルボディ内に複数の div を組み込むにはどうすればよいですか?C++ - cmd.exe (CreatProcess) からコマンドを出力すると、「もっと?」というメッセージが表示されます。それを取り除く理由と方法は何ですか?ニューラル ネットワーク - 文頭から word2vec (CBOW) トレーニング データを構築しますC++ - 指定された順序と事前順序を持つバイナリ ツリーを見つけようとしました。再帰的アプローチに従っていますが、間違った出力が得られます。Typescriptで型キャストせずに共用体型オブジェクトのプロパティにアクセスする方法typescript - 型を何らかのプロパティを持つオブジェクトに絞り込むアニメーション - React ネイティブでテキストと画像をアニメーション化する方法discord.pyを使用して既存のjsonファイルを埋め込みとして送信しますopenssl - NGINX は tls1.2 暗号をサポートしていませんPython Flask APIはパブリックIPを使用してリモートアクセスしますJavaScript - 選択したドロップダウン文字列値をビュー内のテーブルからコントローラーに渡しますユーザーが JSON 経由で Google ストレージ バケット内のオブジェクトを読み取ることを許可するには、IAM 権限を設定するにはどうすればよいですか
総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。