Запрос отношения ManyToMany Django - PullRequest
0 голосов
/ 24 февраля 2020

Привет всем, кого я хочу запросить manyToManyField из моей базы данных, похоже, что это не работает. Я хотел бы получить из модели базы данных список всех несовместимостей фреймворка. Но когда я делаю запрос, я ничего от этого не получаю.

Вот мои модели:

class Framework(models.Model):
    name = models.CharField(max_length=200)
    language = models.ManyToManyField(Language)
    version = models.CharField(max_length=20)
    typeOfFramework = models.ForeignKey(TypeOfProgram, on_delete=models.CASCADE)
    pros = models.ManyToManyField(Pro)
    nombreAvantage = models.IntegerField(default = 0)
    cons = models.ManyToManyField(Con)
    nombreDesavantage = models.IntegerField(default = 0)
    additionalInformation =  models.ForeignKey(web,blank=True,null=True ,default = None ,on_delete=models.CASCADE)
    incompatibility = models.ManyToManyField("self",blank=True)

    def __str__(self):
        template = '{0.name} {0.version} {0.typeOfFramework} {0.nombreAvantage} {0.nombreDesavantage} {0.additionalInformation}'
        return template.format(self)

    def getLanguage(self):
        return ", ".join([p.name for p in self.language.all()])
    def getPros(self):
        return ", ".join([p.advantage for p in self.pros.all()])
    def getCons(self):
        return ", ".join([p.disadvantage for p in self.cons.all()])

    def getIncompatibility(self):
        return ", ".join([(p.name + ' '+ p.version) for p in self.incompatibility.all()])


    def __iter__(self):
        return [ self.name, 
                 self.language,
                 self.version, 
                 self.typeOfFramework,  
                 self.pros, 
                 self.cons, 
                 self.additionalInformation
      ]

class DataPro(models.Model):
    advantage = models.CharField(max_length=200)
    def __str__(self):
        template = '{0.advantage}'
        return template.format(self)

class DataCon(models.Model):
    disadvantage = models.CharField(max_length=200)
    def __str__(self):
        template = '{0.disadvantage}'
        return template.format(self)

class Database(models.Model):
    name = models.CharField(max_length=200)
    version = models.CharField(max_length=20)
    pros = models.ManyToManyField(DataPro)
    nombreAvantage = models.IntegerField(default = 0)
    cons = models.ManyToManyField(DataCon)
    nombreDesavantage = models.IntegerField(default = 0)
    frameworkIncompatibility = models.ManyToManyField(Framework, blank=True)
    def __str__(self):
        template = '{0.name} {0.version} {0.nombreAvantage} {0.nombreDesavantage}'
        return template.format(self)

    def getDataPros(self):
        return ", ".join([p.advantage for p in self.pros.all()])
    def getDataCons(self):
        return ", ".join([p.disadvantage for p in self.cons.all()])
    def getFrameworkIncompatibility(self):
        return ", ".join([p.name + " "+ p.version for p in self.frameworkIncompatibility.all()])

И вот представление, где я хочу получить список

            listOfDatabase = Database.objects.values_list()
            databaseIncompatibility = []
            for s in listOfDatabase:
                databaseIncompatibility.append(s.objects.filter(frameworkIncompatibility__in=Framework.objects.all()))



            listDatabase = [(q[0],q[1],q[2],q[3],q[4])for q in listOfDatabase]
            #ID, name, version, con, pro

Извините, если это глупый вопрос, это мой первый django проект, и я немного растерялся, как что-то делать.

Спасибо всем за ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...