Допустим, у нас есть 2 приложения, игры и стримеры. Оба приложения получили свои собственные представления, модели, шаблоны и т. Д. В стримерах приложений мы получили модель
Streamer
с полем
games = models.ManyToManyField ('games.Game')
и мы импортируем модель Game из приложений игры. Теперь после миграции, добавив некоторый контент, мы можем создать объект Streamer и назначить ему игры, в которые он играет. Но когда дело доходит до отображения всех игр, в которые играет выбранный Streamer, добавляя в шаблон тег
{{streamer.games}}
мы получаем строку шаблона
games.Game.None
так что что-то вызывает это, и мы пока не знаем, что именно. Мы создали представления для игр, стримеров, шаблонов, URL-адресов и все работает нормально, потому что мы получаем данные, такие как ник стримера или ссылки стримера на YouTube / Twitch и т. Д., Но если мы хотим, чтобы в нашем приложении стримерам разрешалось отображать игры, назначенные стримерам мы должны импортировать представления и модели из стримеров и игр? Или мы должны изменить в app streamers / views.py любое представление и разместить там игры, импортированные из приложений? Я знаю, как я мог бы сделать это в одном приложении с моделями и связями ManyToMany, потому что у меня уже был шанс (с помощью StackOverFlow) сделать что-то подобное. Но знайте, что я делаю проект (для обучения), и я решил лучше разделить отдельные приложения, и я не уверен, как это сделать. Если бы обе модели были в одном приложении, а представления были бы написаны, я мог бы просто использовать это как
{% for game in streamer.games.all %}
{{ games.title }}
{% endfor %}
но вот эта проблема для меня, потому что это 2 разных приложения (я читал, что действительно лучше разделить их, как хорошая практика)
кос / models.py
from django.db import models
from games.models import Game, Genre
from shots.utils import get_unique_slug
from django.utils import timezone
...
# model for streamer
class Streamer(models.Model):
nick = models.CharField(max_length=30)
twitch = models.CharField(max_length=70)
games = models.ManyToManyField('games.Game')
...
кос / views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Streamer
from django.utils import timezone
from django.contrib.auth.decorators import login_required
from .forms import StreamerForm
...
# defining page for single streamer
def streamer_detail(request, slug):
streamer = get_object_or_404(Streamer, slug=slug)
return render(request, 'streamers/streamer_detail.html', {'streamer': streamer})
...
кос / шаблоны / streamer_detail.html
{% block content %}
<div class="post">
{% if streamer.published_date %}
<div class="date">
{{ streamer.published_date }}
</div>
{% endif %}
{% if user.is_authenticated %}
<a href="{% url 'streamer_edit' slug=streamer.slug %}">Edit streamer</a>
{% endif %}
<h2>{{ streamer.nick }}</h2>
<a href="https://{{streamer.youtube}}">My YouTube Channel</a>
<a href="https://{{ streamer.twitch }}">My Twitch Channel</a>
<p>I'm streaming on {{ streamer.platform }}</p>
Games that I'm playing
{{ streamer.games }}
</div>
{% endblock %}
игры / models.py
from django.db import models
from django.utils import timezone
from shots.utils import get_unique_slug
# model for game
class Game(models.Model):
title = models.CharField(max_length=70)
genres = models.ManyToManyField('Genre', blank=True)
...
# model for genre
...
игры / views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Game
from django.utils import timezone
from django.contrib.auth.decorators import login_required
from .forms import GameForm
# defining page with newest games
...
# defining page for single games
def game_detail(request, slug):
game = get_object_or_404(Game, slug=slug)
return render(request, 'games/game.html', {'game': game})
...