У меня 3 модели: пользователь, сервер и протокол. В моем шаблоне я хочу отобразить только список серверов, доступных по определенному протоколу (например, SSH) и пользователю.
models.py:
class Protocol(models.Model):
name = models.CharField(
verbose_name = ('Protocol name'),
max_length = 50,
unique = True,
default = "Protocol",
blank = False
)
port = models.IntegerField(
verbose_name = ('Port Number'),
default = 22,
blank = False,
validators=[MinValueValidator(0), MaxValueValidator(65535)]
)
def __str__(self):
return self.name
class Server(models.Model):
name = models.CharField(
unique = True,
verbose_name = ('Server name'),
max_length = 50,
default = "Server name",
blank = False
)
hostname = models.CharField(
verbose_name = ('Host name'),
max_length = 40,
default = "hostname",
blank = False
)
ip = models.GenericIPAddressField(
verbose_name = ('IP address'),
protocol = 'ipv4',
blank=False
)
user = models.ManyToManyField(User, related_name='User')
protocol = models.ManyToManyField(Protocol, related_name='Protocol')
def __str__(self):
return self.name
view.py:
class ServerListView(LoginRequiredMixin,ListView):
queryset = Server.objects.all()
context_object_name = 'servers'
файл шаблона:
{%for server in servers%}
<a><div>
<h4>{{server.name}}</h4>
<h6>Hostname: {{server.hostname}}</h6>
<h6>IP Address: {{server.ip}}</h6>
</div>
</a>
{%endfor%}
Все отлично работает. Однако я не могу отобразить протокол, связанный с каждым сервером. Я пробовал эти строки, но результат None и ничего не отображается!
{% for protocol in server.Protocol.all %}
<h1>protocol: {{ protocol }}</h1>
{% endfor %}
Может кто-нибудь помочь мне, пожалуйста!