データベースからManyToMany関係で1つのレコードを取得してJSON直列化インスタンスを表示する単純なアクションを作成しようとしています。DictへのManyToMany関係のDjangoモデルインスタンスフィールド
サービスモデル:
class SystemService(models.Model):
name = models.CharField(max_length=35, unique=True, null=False, blank=False)
verion = models.CharField(max_length=35, unique=True, null=False, blank=False)
def __str__(self):
return self.name
サーバモデル:
class Server(models.Model):
name = models.CharField(max_length=35, unique=True, null=False, blank=False)
ip_address = models.GenericIPAddressField(protocol='both', unpack_ipv4=True,
null=False, blank=False, unique=True)
operating_system = models.ForeignKey(OperatingSystem, null=False, blank=False)
monitored_services = models.ManyToManyField(SystemService)
info = models.CharField(max_length=250, null=True, blank=True)
pause_monitoring = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
ここでは、それが今MUJ-ガブリエルの答えを使用している方法です。
def get_server(request, server_id):
try:
server_object = Server.objects.get(id=server_id)
data = {
'name': server_object.name,
'ip_address': server_object.ip_address,
'os': server_object.operating_system.name,
'info': server_object.info,
'monitoring_paused': server_object.pause_monitoring,
'created_at': server_object.created_at,
'update_at': server_object.updated_at,
'services': {service['id']: service['name'] for service
in server_object.monitored_services.values('id', 'name')}
}
return JsonResponse(data)
except Server.DoesNotExist:
return JsonResponse({'error': 'Selected object does not exits!'})
私は同じことに私はJSONとして1つのインスタンスを取得する必要があるたびに繰り返す必要があるため、私は私がやったことは十分であるとは思わないので、私はニシキヘビがあるかどうかを知りたいとそれを行うための動的な方法?
答えのためのThanxコードを改善するために使用しましたが、毎回同じことを繰り返したくないと言ったときに、私は他のモデルを意味していました。どのモデルのインスタンスでも使用できます。 – ddalu5
私が返答で言ったように、Modelクラスで@propertyを作成してコード –
を移動すると、別のモデル(Serverだけではありません)のインスタンスを意味します。 – ddalu5