我有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.nameview.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 %}有人能帮帮我吗?
发布于 2019-05-08 09:30:51
试着改变
{% for protocol in server.Protocol.all %}至
{% for protocol in server.protocol.all %}还要注意,如果您试图使用Protocol,因为它是related_name,那么这实际上是向后的,它意味着在协议对象上使用它,在协议对象中,您将执行protocol.Protocol.all以获取所有服务器-因此,为清楚起见,您可能希望将其重命名为servers。
https://stackoverflow.com/questions/56031792
复制相似问题