【发布时间】:2020-10-16 04:35:28
【问题描述】:
我试图弄清楚如何使用 Django-taggit 的选择来呈现下拉字段。
对于变量“类型”,如何在 Home.html 中传递类别(A、B、C)并将输入类型更改为选择?我认为它一定是这样的,并且以某种方式参考类别选择:
<select class="custom-select custom-select-sm">
{% for num in form.fields.choices %}
<option value="{{ num }}">{{ categories.choice(num) }}</option>
{% endfor %}
</select>
模型.py
from django.db import models
from taggit.managers import TaggableManager
class Post(models.Model):
categories=(
('A', 'A'),
('B', 'B'),
('C', 'C'),
)
type = models.CharField(max_length=250, choices=categories)
title = models.CharField(max_length=250)
description = models.TextField()
published = models.DateField(auto_now_add=True)
slug = models.SlugField(unique=True, max_length=100)
tags = TaggableManager()
def __str__(self):
return self.title
forms.py
from django import forms
from .models import Post
categories=(
('A', 'A'),
('B', 'B'),
('C', 'C'),
)
class PostForm(forms.ModelForm):
type = forms.ChoiceField(choices=categories)
class Meta:
model = Post
fields = [
'type',
'title',
'description',
'tags',
]
views.py
from django.shortcuts import render, get_object_or_404
from .models import Post
from .forms import PostForm
from taggit.models import Tag
from django.template.defaultfilters import slugify
def home_view(request):
posts = Post.objects.all()
common_tags = Post.tags.most_common()[:4]
form = PostForm(request.POST)
if form.is_valid():
newpost = form.save(commit=False)
newpost.slug = slugify(newpost.title)
newpost.save()
form.save_m2m()
context = {
'posts':posts,
'common_tags':common_tags,
'form':form,
}
return render(request, 'home.html', context)
主页.html
{% extends 'base.html' %}
{% block content %}
<div class="container pt-5">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label>Type</label>
<input type="text" class="form-control" name="type" placeholder="Add type">
</div>
<div class="form-group">
<label>Title</label>
<input type="text" class="form-control" name="title" placeholder="Add title">
</div>
<div class="form-group">
<label>Description</label>
<textarea type="text" class="form-control" name="description" placeholder="Add description"></textarea>
</div>
<div class="form-group">
<label>Tags</label>
<input type="text" data-role="tagsinput" class="form-control" name="tags">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<p>Common Tags:
{% for mt in common_tags %}
<a href="#" class="badge badge-success">{{mt}}</a>
{% endfor %}
</p>
<div class="row mb-2 posts">
{% for post in posts %}
<div class="col-md-6">
<div class="cards">
<div class="row no-gutters border rounded flex-md-row mb-4 shadow-sm h-md-250">
<div class="col p-4 d-flex flex-column position-static">
<h3 class="my-1"><a href="{% url 'detail' post.slug %}">{{post.title}}</a></h3>
<div style="display:flex">
{% for tag in post.tags.all %}
<a href="{% url 'tagged' tag.slug %}" class="mr-1 badge badge-info">#{{ tag }}</a>
{% endfor %}
</div>
<p class="mb-auto">{{post.description}}</p>
<p class="mb-auto text-muted">{{post.published}}</p>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock content %}
【问题讨论】:
标签: django-taggit