سؤال

لدي نموذجان بسيطان فيmodels.py:الخدمة والمضيف.لدى Host.services علاقة m2m مع الخدمة.بمعنى آخر، يمتلك المضيف العديد من الخدمات ويمكن لخدمة واحدة أن تتواجد على عدة مضيفين؛M2M الأساسية.

models.py

class Service(models.Model):
        servicename = models.CharField(max_length=50)
        def __unicode__(self):
                return self.servicename
        class Admin:
                pass

class Host(models.Model):
        #...
        hostname = models.CharField(max_length=200)
        services = models.ManyToManyField(Service)
        #...

        def service(self):
                return "\n".join([s.servicename for s in self.services.all()])

        def __unicode__(self):
                return self.hostname

        class Admin:
                pass

كيف يمكنني الحصول على مخرجات واحد إلى متعدد في واجهة الإدارة، مع فئة "الخدمة" كأساس (عكس متعدد إلى متعدد؟).

هل أحتاج إلى استخدام '_set.all()'؟

هل كانت مفيدة؟

المحلول

يستخدم related_name على الخدمات:

services = models.ManyToManyField(Service, related_name='hosts')

ومن ثم القيام به

service.hosts.all()

للحصول على المضيفين للخدمة.

نصائح أخرى

هذا الشيء يبدو و كأنه سينجز المطلوب:

class Service(models.Model):
    servicename = models.CharField(max_length=50)

    def hostname(self):
            return "\n".join([s.hostname for s in self.hosts_services.all()])

    def __unicode__(self):
            return self.servicename

class Host(models.Model):
    #...
    services = models.ManyToManyField(Service, related_name='hosts_services')
    #...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top