У меня есть модель, которая выглядит следующим образом:
class ClusterHosts(models.Model):
host_name = models.TextField(max_length=300, null=True)
... omitted for brevity ...
cluster = models.ForeignKey(Cluster, null=True)
@property
def maintenance_mode(self):
from vc.helpers import VcHelper
vch = VcHelper()
try:
vc = self.cluster.data_center.virtual_center.name
return vch.is_host_in_maint_mode(vc=vc, host=self.host_name)
except:
return 'Unknown'
Затем я запускаю этот запрос в консоли Python:
>>> chs = ClusterHosts.objects.filter(create_date=datetime.datetime.today()
>>> for ch in chs:
... print "%s %s" % (ch.host_name, ch.maintenance_mode)
...
Traceback (most recent call last):
File "<input>", line 2, in <module>
AttributeError: 'ClusterHosts' object has no attribute 'maintenance_mode'
В другом проекте, учебнике по DRF, у меня естьэта модель:
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()
linenos = models.BooleanField(default=False)
language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
group = models.ForeignKey(GroupOfSnippets, null=True, on_delete=models.CASCADE)
owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE)
highlighted = models.TextField()
@property
def rand_number(self):
return randint(1,100)
И я могу сделать это…
>>> ss = Snippet.objects.all()
>>> for s in ss:
... print(s.rand_number)
...
92
Так почему же свойство, доступное в модели Snippet, работает, а свойство в модели ClusterHosts недоступно?