Django Adminでオブジェクトを削除または追加すると、Webページでオブジェクトが削除または追加されませんか?

終わり

カテゴリのリストがあり、各カテゴリに投稿のリストがある簡単なアプリを作成しようとしました。

Django AdminでCategoryオブジェクトを削除すると、Adminには表示されなくなりますが、テンプレートには表示されたままになります。これは2つのカテゴリのみを表示している管理者です

管理者は2つのカテゴリのみを表示します

ただし、home.htmlでは3が表示されます。 home.htmlは3を示しています

Navbarを提供するbase.htmlも3を示しています

navbarは3を示しています

キャッシュとハードリロードをクリアしました。これが私のコードです:

Views.py

from django.shortcuts import render, get_object_or_404
from .models import Post, Category
from django.views.generic import ListView, DetailView

category_list = Category.objects.all()

def privacy(request):
    return render (request, 'privacy.html', {'category_list':category_list})

def home(request):    
    return render(request,'home.html',{'category_list':category_list})

def categoryDetail(request, slug):
    category = get_object_or_404(Category, slug=slug)
    post = Post.objects.filter(category=category)
    return render(request,'category_detail.html',{'category':category, 'post':post, 'category_list':category_list})

およびテンプレート、home.html

{% if category_list %}

    <!-- Content Row -->
    <div class="row">
        {% for cat in category_list %}
      <div class="col-md-4 mb-5">
        <div class="card h-100">
          <div class="card-body">
            <h2 class="card-title"><a href="{% url 'category_detail' cat.slug %}">{{ cat.name }}</a></h2>
            <p class="card-text">{{ cat.summary|truncatechars:100 }}</p>
          </div>
          <div class="card-footer">
            <a href="{% url 'category_detail' cat.slug %}" class="btn btn-primary btn-sm">More Info</a>
          </div>
        </div>
      </div>
      {% endfor %}
    </div>
    <!-- /.row -->

{% else %}

<h3>COMING SOON ...</h3>

{% endif %}

同様にbase.htmlでも

        <ul class="navbar-nav ml-auto">
{% for cat in category_list %}
          <li class="nav-item">
            <a class="nav-link" href="{% url 'category_detail' cat.slug %}">| {{cat.name}}</a>
          </li>
{% endfor %}
        </ul>

models.py

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=255)
    summary = models.TextField()
    slug = models.SlugField(max_length=255, unique=True)

    def __str__(self):
        return self.name

class Post(models.Model):
    title= models.CharField(max_length=255)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

    def __str__(self):
        return self.title

カテゴリの詳細とその中の投稿のリストを同じページに表示できるようにしたかったので、Views.pyでこれらの関数を作成するためのYouTubeビデオをフォローしました...エラーが原因であると恐ろしい感じがします関数の外でcategory_listを定義することへ...あるいはもっと悪いことに!

また、メニューオプションを動的に更新するには、base.htmlに関数を記述する必要がありますか?

crimsonpython24

これは問題ではありません。すべてを自動的にリロードするためにカスタム関数を追加する必要はありません。Djangoの一括削除メソッドが実際にdelete()メソッドを呼び出さないのは事実です

これは、管理サイトから削除する場合にのみ適しています。これがカスタムテンプレートで発生した場合は、別のことが起こっています。しかし、ここでは大丈夫です。

ドキュメントから

「選択したオブジェクトの削除」アクションは、効率上の理由からQuerySet.delete()を使用しますが、これには重要な注意事項があります。モデルのdelete()メソッドは呼び出されません。

この動作をオーバーライドする場合は、選択した各アイテムに対してModel.delete()を呼び出すなど、好みの方法で削除を実行するカスタムアクションを作成するだけです。

したがって、これを管理者に追加します。

class CategoryAdmin(admin.ModelAdmin):
    actions=['really_delete_selected']

    def get_actions(self, request):
        actions = super(CategoryAdmin, self).get_actions(request)
        del actions['delete_selected']
        return actions

    def really_delete_selected(self, request, queryset):
        for obj in queryset:
            obj.delete()

        if queryset.count() == 1:
            message_bit = "1 Category entry was"
        else:
            message_bit = "%s category entries were" % queryset.count()
        self.message_user(request, "%s successfully deleted." % message_bit)
    really_delete_selected.short_description = "Delete selected entries"

admin.site.register(Entry, CategoryAdmin)

参照

更新

コードをもう一度確認したところ、別の脆弱性が見つかりました。

category_list = Category.objects.all()

def home(request):    
    return render(request,'home.html',{'category_list':category_list})

category_listをローカル変数として使用する必要があります。つまり、home関数内で使用する必要があります。グローバルに(外部で)宣言した場合、実行ごとに1回だけ更新されるため、変更に応答しません。明確にするために、それは

def home(request):    
    category_list = Category.objects.all()
    return render(request,'home.html',{'category_list':category_list})

これが機能する場合は、管理ダッシュボードに加えられた変更を自由に削除してください。場合によっては、削除が実際の問題のようです。

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

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

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

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

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    Python / SciPyのピーク検出アルゴリズム

  4. 4

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

  5. 5

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

  6. 6

    androidsoongビルドシステムによるネイティブコードカバレッジ

  7. 7

    ZScalerと証明書の問題により、Dockerを使用できません

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  10. 10

    二次導関数を数値計算するときの大きな誤差

  11. 11

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

  12. 12

    画像変更コードを実行してもボタンの画像が変更されない

  13. 13

    Reactでclsxを使用する方法

  14. 14

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  15. 15

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  16. 16

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

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

  19. 19

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  20. 20

    好き/愛の関係のためのデータベース設計

  21. 21

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

ホットタグ

アーカイブ