Как показать в форме множество объектов в разных полях?

hi я написал код для создания жанрового раздела на сайте и использовал many-to-many-field в моделях для его добавления:

from django.db import models
from django.contrib.auth.models import User


class Genre(models.Model):
    name = models.CharField(unique=True,max_length=20)

    def __str__(self):
        return self.name.title()



class Mdata(models.Model):
    name = models.CharField(max_length=100)
    artist = models.CharField(max_length=150)
    album = models.CharField(max_length=100)
    nation = models.CharField(max_length=100)
    duration = models.DecimalField(max_digits=4,decimal_places=2)
    released_in = models.DecimalField(max_digits=4,decimal_places=0)
    uploaded_at = models.DateTimeField(auto_now_add=True)
    image = models.ImageField(upload_to='images/',blank=True,null=True)
    audio = models.FileField(upload_to='audios/',null=True,blank=True)
    genre = models.ManyToManyField(Genre)
    uploader = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.name.title()+" by "+self.artist.title()

но когда я проверяю саму музыку на сайте, она просто показывает, сколько объектов я выбрал, а не жанры, как вы можете видеть здесь:

[![screen shot][1]: https://i.stack.imgur.com/xHaMK.png

вот мой шаблон:

{% extends 'pages/base.html' %}

{% block content %}

<form>
    {% if mdata.image %}
        <img src="mdata.image.url" height="500" width="500">
    {% endif %}

    {% for field in form %}
        <p>{{ field.label }} : {{ field.value}}</p>
    {% endfor %}
</form>

<a href="{% url 'pages:edit_music' mdata.id %}">edit</a>

{% endblock %}

и формы (формы просты, я просто добавил модели как поле):

from django import forms
from django.forms import ModelForm
from .models import Mdata


class MdataForm(ModelForm):
    class Meta:
        model = Mdata
        fields =[
            'name',
            'artist',
            'album',
            'genre',
            'nation',
            'duration',
            'released_in',
            'image',
            'audio',
            ]

Поле "многие ко многим" в Django по умолчанию отображается в <select multiple>. {{ field.value }} возвращает список id. Таким образом, [1] на вашем скриншоте означает, что ваша MData здесь имеет один Жанр и его id равен 1.

Если вы хотите отображать названия жанров в списке, измените вашу форму на

from django import forms
from .models import MData, Genre

class MDataForm(forms.ModelForm):
    genre = forms.ModelMultipleChoiceField(Genre, to_field_name='name')
    class Meta:
        model = MData
        fields = [
            'name',
            'artist',
            'album',
            'genre',
            'nation',
            'duration',
            'released_in',
            'image',
            'audio',
        ]

Также не забудьте окружить data.image.url словами {{ и }}.

Вернуться на верх