Получить все теги, если пост имеет теги, то отметить как выбранные, а остальные как не выбранные в django
При редактировании поста для обновления я получаю только выбранные теги для этого поста, как я могу получить все теги и с выбранной опцией для конкретного поста. Например, у меня есть 4 тега и 1 тег назначен на пост, когда я редактирую этот пост для обновления, я должен получить назначенный тег как выбранный, а остальные 3 тега как не выбранные. так что я могу назначить оставшиеся теги на пост, если захочу. И есть ли способ создать дополнительные теги при обновлении поста. Для справки я загрузил изображение ниже, на котором я получил только выбранный тег, я хочу показать остальные невыбранные теги тоже.
models.py
class Tag(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
class Card(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=150, unique=True)
desc = models.TextField()
img = models.ImageField(upload_to='uploads/')
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
publish_date = models.DateTimeField(blank=True, null=True)
published = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag, blank=True)
def __str__(self):
return self.title
views.py
@login_required(login_url = '/login/')
def edit(request, pk):
edit_list = Card.objects.get(id=pk)
edit_tags = Card.objects.filter(id=pk)
tag = Tag.objects.all()
context = {
'edit_list': edit_list,
'edit_tags': edit_tags,
'tag':tag,
}
return render(request, 'edit-post.html', context)
HTML
<div class="container my-5">
<form action="{% url 'post_update' edit_list.pk %}" method="post" enctype="multipart/form-data">{% csrf_token %}
<div class="controls p-3">
<label for="title">Tilte:</label>
<input type="text" name = "title" value="{{ edit_list.title }}">
</div>
<div class="controls p-3">
<label for="slug">Slug:</label>
<input type="text" name = "slug" value="{{ edit_list.slug}}">
</div>
<div class="controls p-3">
<label for="desc">Desc:</label>
<textarea type="textarea" name = "desc" value="{{ edit_list.desc }}" cols="40" rows="5">{{ edit_list.desc }}</textarea>
</div>
<div class="controls p-3">
<label for="img">Image:</label>
<p class="file-upload">
Currently: <a href="{{ edit_list.img.url }}">{{ edit_list.img.url }}</a><br>
Change: <input type="file" name="img" accept="image/*" id="id_img">
</p>
</div>
<div class="controls p-3">
<label for="publish_date">Publish date:</label>
<input type="date" name="publish_date " value="{{ edit_list.publish_date }}"><span>{% now 'd m Y' %}</span>
</div>
<div class="controls p-3">
<label for="published">Published:</label>
<input type="checkbox" name = "published" {% if edit_list.published %} checked="" {% endif %}>
</div>
<div class="controls p-3">
<label for="tags">Tags:</label>
<select type="select" name = "tags" multiple="">
{% for i in edit_tags %}
{% for j in i.tags.all %}
<option value="" {% if j %} selected="" {% endif %} >{{ j }} </option>
{% empty %}
{% for k in tag %}
<option value="">{{ k }} </option>
{% endfor %}
{% endfor %}
{% endfor %}
</select>
</div>
<div class="controls p-3">
<input type="submit" value="Update">
</div>
</form>
</div>
