2つのモデルでのDjangoフォームの検証とアクション

sikor

カスタムフォーム(デフォルトのモデルフォームのみ)を作成した経験があまりないので、ここで助けを求めています。ユーザーから「feed_url」を取得するフォームを作成しようとしています。既に存在する場合は、UserFeedモデルに参照を追加するだけです。存在しない場合は、Feedモデルに追加し、UserFeedモデルでも参照する必要があります。

モデル

class Category(models.Model):
    name = models.CharField(unique=False, max_length=64)
    user = models.ForeignKey(User)
    slug = AutoSlugField(populate_from='name', always_update='True', unique_with='user')


    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ('name',)


class Feed(models.Model):
    feed_url = models.URLField(unique=True)

    def __unicode__(self):
        return self.feed_url


class UserFeed(models.Model):
    feed = models.ForeignKey(Feed)
    title = models.CharField(max_length=64)
    category = models.ForeignKey(Category)
    user = models.ForeignKey(User)
    slug = AutoSlugField(populate_from='title', always_update='True', unique_with='user')

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ('title',)

フォーム

class UserFeedForm(forms.Form):
    feed_url = forms.URLField()
    title = forms.CharField(max_length=64)
    category = forms.ModelChoiceField(Category)
    user = forms.HiddenInput()

ビュー

def addfeed(request):
    categories = Category.objects.filter(user=request.user)
    feeds = Feed.objects.all()
    if request.method == 'POST':
        form = UserFeedForm(request.POST)
        form.fields['category'].queryset = categories
        if form.is_valid():
            feed = form.save(commit=False)
            if form.fields['feed_url'] in feeds:
                ##### add to Feed object and add reference to UserFeed object
                feed.user = request.user
                feed.save()
            else:
                ##### get id from Feed object and add reference to UserFeed object
                feed.user = request.user
                feed.save()
            return HttpResponseRedirect("/reader/manage")
    else:
        form = UserFeedForm()
        form.fields['category'].queryset = categories
    context = {'form': form,}
    return expand_context_and_render(request, context, 'reader/form.html')

誰かが私を正しい方向に向けてくれませんか?ありがとう

更新これで、ビューとフォームを次のように更新しました。

フォーム

class UserFeedForm(forms.ModelForm):
    feed = forms.URLField()
    title = forms.CharField(max_length=64)
    category = forms.ModelChoiceField(Category)
    user = forms.HiddenInput()

    class Meta:
        model = UserFeed
        fields = ['feed', 'title', 'category']

ビュー

def addfeed(request):
    categories = Category.objects.filter(user=request.user)
    feeds = Feed.objects.all()
    if request.method == 'POST':
        form = UserFeedForm(request.POST)
        form.fields['category'].queryset = categories
        if form.is_valid():
            feed = form.cleaned_data.get('feed')
            if feed in feeds:
                ##### get id from Feed and add reference to UserFeed
                existing_feed = Feed.objects.get(feed_url=feed)
                form.feed = existing_feed.id
                form.user = request.user
                form.save(commit=True)
            else:
                ##### add to Feed object and then add reference to UserFeed object
                Feed.object.create(feed_url=feed)
                existing_feed = Feed.objects.get(feed_url=feed)
                form.feed = existing_feed.id
                form.user = request.user
                form.save(commit=True)
            return HttpResponseRedirect("/reader/manage")
    else:
        form = UserFeedForm()
        form.fields['category'].queryset = categories
    context = {'page_title': page_title,
               'form': form,
               }
    return expand_context_and_render(request, context, 'reader/form.html')

近づいていると思いますが、それでも機能せず、次のエラーが表示されます: "" u 'を割り当てることができませんhttp://feeds.bbci.co.uk/news/rss.xml ' ":" UserFeed.feed 「「フィード」インスタンスである必要があります。」

どうすればこれを修正できますか?ありがとう

sikor

私はついにそれを次のように機能させました:

フォーム

class UserFeedForm(forms.Form):
    feed = forms.URLField()
    title = forms.CharField(max_length=64)
    category = forms.ModelChoiceField(Category)
    user = forms.HiddenInput()

    class Meta:
        model = UserFeed
        fields = ['feed', 'title', 'category']

ビュー

def addfeed(request):
    user = request.user
    categories = Category.objects.filter(user=request.user)
    if request.method == 'POST':
        form = UserFeedForm(request.POST)
        form.fields['category'].queryset = categories
        if form.is_valid():
            feed = form.cleaned_data['feed']
            category = form.cleaned_data['category']
            title = form.cleaned_data['title']
            feed_obj, created = Feed.objects.get_or_create(feed_url=feed)
            obj = UserFeed(feed=feed_obj, title=title, category=category, user=user)
            obj.save()
        return HttpResponseRedirect("/reader/manage")
    else:
        form = UserFeedForm()
        form.fields['category'].queryset = categories
    context = {'page_title': page_title,
               'form': form,
               }
    return expand_context_and_render(request, context, 'reader/form.html')

以下の答えからの両方のヒントは、私を正しい方向に向けました。ありがとう!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

レンダリングフォームと投稿フォームの別々のアクションでのYii2検証

1つのフォームと1つの送信ボタンで2つのアクションを送信する

Angular、2つのフィールドのいずれかに検証を設定する方法は、リアクションフォームアプローチで検証する必要があります

1つのフォームの1つのモデルテーブル内の多くのオブジェクトのエディション。Django

DjangoモデルフォームのJQuery検証

Django:フォームモデルの検証

「myApp」アプリケーションでのAngularJSフォームの検証。

HTMLフォームの2つのアクション

フォームのセクションの検証

PhalconPHP-フォームとモデルの検証

Yii2複数のフォームを1つのアクションで

apexoracleデータベースアプリケーションフォームでのplsql検証

検証フォームとフィールド検証の2つのイベント

jqueryバリデータフォーム:リモート電子メール検証の完了後にフォームアクションにアクセスする方法

2つのモデルを持つ単一フォームのCSRF検証の失敗

Django:オプションのモデルフォームフィールド

アクションの問題とフォームでの送信

Angularjsのデフォルトのアクションフォームの送信

Django:2つの引数で表示(またはURL?)を指示するHTMLフォームアクション

リアクティブフォームでオプションのFormControlを検証できません

クライアントでのGrailsフォームの検証

Django-同じアクション属性を持つ単一ページの2つのフォームタグ

FKリレーションを持つ単一の送信/ビューフローで2つのモデルフォームを処理できませんか?

フォームのデフォルトのアクションがcaHideであるのはなぜですか?

Laravel 5のフォームとモデル間のデータ検証のための最良のアプローチは何ですか?

1つのモデルで2つのポリモーフィックアソシエーションをレールします

Symfony-コレクションフォームの複数の要素の検証

Yii REST Updateでは、フォームモデルの検証に少なくとも1つのフィールドが必要です

複数の送信を伴うフォームのモデリングと検証

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ