python初心者です。お手数をおかけしますが有識者の皆さん力を貸してください。
blogを作成しており、記事(post)にカテゴリー(category)とタグ(tag)の設置をしています。
記事の作成(PostCreateView)時にカテゴリーとタグを設定するように設計しているのですが。
記事の作成の時に新規のカテゴリーとタグを追加できるように考えています。
以下の様に『+』のアイコンを押すと新規追加で、『ペン』のアイコンはカテゴリーで選択されているものを編集で、同様に『ゴミ箱』は削除を考えています。
そして、カテゴリーの新規追加(category_create)、編集(category_update)、削除(category_delete)は以下のようにurls.pyを設定し
編集(category_update)、削除(category_delete)には、category_idを指定しています。
<urls.py>
python
1urlpatterns = [ 2 path('', views.PostListView.as_view(), name="post_list"), 3 path('create/', views.PostCreateView.as_view(), name="post_create"), 4 path('<int:pk>/', views.PostUpdateView.as_view(), name="post_update"), 5 path('<int:pk>/', views.PostDeleteView.as_view(), name="post_delete"), 6 path('category/create/', views.CategoryCreateView.as_view(), name="category_create"), 7 path('category/<int:category_id>/', views.CategoryUpdateView.as_view(), name="category_update"), 8 path('category/<int:category_id>/', views.CategoryDeleteView.as_view(), name="category_delete"), 9]
質問は、記事の作成時にカテゴリーの編集や削除のリンクに必要なcategory_idに設定する値をどうやって、カテゴリーのselectから取得するかです。
記事作成ページ上で、カテゴリーを選択して、編集ボタンアイコンをクリックしたさいに編集ボタンアイコンのリンクに選択したカテゴリーのpkを渡す方法を知りたいです。
href={% url 'sample:category_update' category_id=<ここにselectで設定しているcategoryのpkを入れたい> %}
テンプレートのカテゴリーのselectのoptionのvalueをpkとして使えばよいと思っています。
記事の作成のテンプレートは以下です。
html
1{% block body_block %} 2<h1> 3 {% if not form.instance.pk %} 4 Create Post 5 {% else %} 6 Update Post 7 {% endif %} 8</h1> 9 10 <form class="" method="post"> 11 {% csrf_token %} 12 <ul> 13 <li> 14 {{ form.title.label_tag }} 15 {{ form.title }} 16 </li> 17 <li> 18 {{ form.text.label_tag }} 19 {{ form.text }} 20 </li> 21 <li> 22 {{ form.category.label_tag }} 23 {{ form.category }} 24 <a class="btn btn-sm btn-primary" href="{% urls "sample:category_create" %}"> 25 <span class="fa fa-plus"></span> 26 </a> 27 <a class="btn btn-sm btn-primary" href="{% urls "sample:category_update" category_id=???? %}"> 28 <span class="fa fa-pencil"></span> 29 </a> 30 <a class="btn btn-sm btn-danger" href="{% urls "sample:category_delete" category_id=???? %}"> 31 <span class="fa fa-trash"></span> 32 </a> 33 </li> 34 <li> 35 {{ form.tags.label_tag }} 36 {{ form.tags }} 37 </li> 38 </ul> 39 <input type="submit" class="btn btn-primary" value="submit"> 40 </form> 41 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> 42 {{ form.media.js }} 43 44{% endblock %}
実行時の"{{ form.category }}"は、以下に変換されています。
selectのoptionのvalueをjavascriptで取得しようと考えているのですがもっと良い方法があるような気がしており、質問投稿させていただきました。
何か良い方法があればご教示いただけると幸いです。
ちなみにタグは、django-select2のModelSelect2TagWidgetを使用して、複数タグ選択と複数同時に新規追加はできているので問題ないです。
categoryもdjango-select2を使ってどうにかならないか検討中です。何かあれば別の投稿で質問させていただきたいです。
<models.py>
python
1class Category(models.Model): 2 name = models.CharField('カテゴリー', max_length=50) 3 4 def __str__(self): 5 return self.name 6 7 8class Tag(models.Model): 9 name = models.CharField('タグ名', max_length=255, unique=True) 10 11 def __str__(self): 12 return self.name 13 14 15class Post(models.Model): 16 title = models.CharField('タイトル', max_length=255) 17 text = models.TextField('本文', blank=True, max_length=1000) 18 category = models.ForeignKey(Category, verbose_name='カテゴリー', on_delete=models.PROTECT) 19 tags = models.ManyToManyField(Tag, verbose_name='タグ', blank=True) 20 21 def __str__(self): 22 return self.title 23
<forms.py>
python
1class PostForm(forms.ModelForm): 2 """記事の作成・更新フォーム""" 3 4 class Meta: 5 model = Post 6 fields = '__all__' 7 8class CategoryForm(forms.ModelForm): 9 10 class Meta: 11 model=Category 12 fields='__all__'
何か情報の不足等ございましたら、ご連絡をお願いいたします。
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。