Django: запрос двух таблиц на основе URL-адреса - PullRequest
0 голосов
/ 02 мая 2020

Я создал базу данных производителей музыки c и их образцов.

class Producers(models.Model):
    producer_id = models.AutoField(db_column='Producer_ID', primary_key=True, blank=True, null=False)  # Field name made lowercase.
    slug = models.SlugField()
    name = models.TextField(db_column='Name')  # Field name made lowercase.
    info = models.TextField(db_column='Info', blank=True, null=True)  # Field name made lowercase.
    image = models.ImageField(null=True, blank=True)


    class Meta:
        managed = False
        db_table = 'producers'


class Samples(models.Model):
    song_id = models.AutoField(db_column='Song_ID', primary_key=True, blank=True, null=False)  # Field name made lowercase.
    producer = models.ForeignKey(Producers, models.DO_NOTHING, db_column='Producer_ID')  # Field name made lowercase.
    artist = models.TextField(db_column='Artist')  # Field name made lowercase.
    title = models.TextField(db_column='Title')  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'samples'

Я установил URL-адреса слагов, указывающие на соответствующего продюсера. ex) "производители / j-dilla /"

Я хочу, чтобы биография каждого производителя перечисляла свои образцы.

Попытка с использованием

def bio(request, slug):
   producer_list = Producers.objects.all().filter(slug=slug)
   samples_list = Samples.objects.all()
   queryset = sorted(
            chain(producer_list, samples_list),
            key=lambda instance: instance.producer_id)
{% for sample in queryset %}
                    <li>
                        <span>Artist: {{ sample.artist }}</span> <br/>
                        <span>Title: {{ sample.title }}</span> <br/>
                        <span>Title: {{ sample.producer_id }}</span> <br/>
                        <hr/>
                    </li>
{% endfor %}

возвращает всю базу данных образцов.

1 Ответ

0 голосов
/ 03 мая 2020

Для всех, кто находится на линии. Это сделало запрос к таблице производителей для slug = slug, а затем отфильтровало таблицу образцов с помощью provider_id. Похоже на SQL оператор соединения.

    producer = Producers.objects.get(slug = slug)
    queryset = Samples.objects.filter(producer=producer.producer_id)
...