@NewNikGit

Как извлечь данные из ManyToManyField?

Есть модель:
class Files_sv(models.Model):
    users = models.ManyToManyField(Files)
    current_user = models.ForeignKey(User, related_name='filessv', null=True)

    @classmethod
    def add_files(cls, current_user, new_friend):
        friend, created = cls.objects.get_or_create(
            current_user=current_user
        )

        friend.users.add(new_friend)

    @classmethod
    def remove_files(cls, current_user, new_friend):
        friend, created = cls.objects.get_or_create(
            current_user=current_user
        )

        friend.users.remove(new_friend)


Здесь создается модель, которая имеет 2 атрибута:
Первый хранит пользователя, второй - список музыки, которую он выбрал.
Как вывести на экран выбранную пользователем музыку?
Пробовал так:
def mymusic(request):
    music = Files_sv.objects.filter(current_user=request.user)
    args = {
        'musics': music
    }
    return render(request, "home/homemy.html", args)

А в HTML:
{% for music in musics %}
                            {% if music.users.image %}
                                <img src="{{ music.users.image.url }}" width="150" height="150">
                            {% endif %}
                            <h2><b>Название:</b>{{music.users.text}} - Опубликовано: {{ music.users.data_time }}</h2>
                            <audio controls>
                                <source src="{{music.users.our_file.url}}" type="audio/mp3">
                            </audio>
                            <h3>Опубликовал: {{ music.users.user.get_full_name }}</h3>         
{% endfor %}

Но ничего не выводит
  • Вопрос задан
  • 371 просмотр
Решения вопроса 1
@JekaROSS
Python Developer
Вечер добрый, `music.users`- это queryset, надо в цикле по нему идти. Попробуй так:
{% for music in musics %}
    {% for user in music.users.all %}
        {% if user.image %}
            <img src="{{ user.image.url }}" width="150" height="150">
        {% endif %}
        <h2><b>Название:</b>{{user.text}} - Опубликовано: {{ user.data_time }}</h2>
        <audio controls>
            <source src="{{ user.our_file.url }}" type="audio/mp3">
        </audio>
        <h3>Опубликовал: {{ user.user.get_full_name }}</h3>
     {% empty %}
        Пусто
    {% endfor %}
{% endfor %}


А вообще, странное название поля:
users = models.ManyToManyField(Files)
Наверное это поле должно называться `files`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы