Присоединяйтесь к столам в Джангу, которые разделяют одну и ту же инострудку

StackOverflow https://stackoverflow.com//questions/9651685

Вопрос

У меня есть три класса, которые я хотел бы запросить.Я хотел бы позволить базу данных выполнять работу.Можно ли запустить один запрос на объекте пользователя, чтобы получить все связанные поля, которые соответствуют?Я пытаюсь избежать присоединения к трем таблицам в моем коде.Если бы я сделал это в коде, я бы запросил все три класса, а затем исключить дубликаты при сохранении матчей.

Query: Get all users whose name contains "William", category is "Single" and alias is "Bill". 

class ModelA(models.Model):
    user = models.ForeignKey(User,related_name="%(class)s",null=False)
    name = models.CharField(max_length=70)

    def __unicode__(self):
        return u'%s' % (self.name)

class ModelB(models.Model):
    user = models.ForeignKey(User,related_name="%(class)s",null=False)
    category = models.CharField(max_length=70)

    def __unicode__(self):
        return u'%s' % (self.category)

class ModelC(models.Model):
    user = models.ForeignKey(User,related_name="%(class)s",null=False)
    alias = models.CharField(max_length=70)

    def __unicode__(self):
        return u'%s' % (self.alias)

Note: this is an example only, and I am not looking to combine all the info in a single table.
.

Это было полезно?

Решение

Вы не можете сделать это без присоединения к трем таблицам.

User.objects.filter(modela__name=u'William', modelb__category=u'Single',
  modelc__alias=u'Bill')
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top