Как получить данные из списка словаря с помощью django

Я пытаюсь разработать словарь (используя django), который содержит голос для произношения. все идет хорошо, но я не могу связать звук со словом, используя следующий запрос.

Model.py

class Warehouse(models.Model):

    word                    = models.CharField(max_length=200, blank=True)
    type                    = models.CharField(max_length=200, blank=True)
    gender                  = models.CharField(max_length=200, blank=True)
    meaning                 = models.TextField(max_length=2000, blank=True)
    synonyms                = models.CharField(max_length=200, blank=True)
    antonyms                = models.CharField(max_length=200, blank=True)
    usage                   = models.TextField(max_length=2000, blank=True)
    


class Audio(models.Model):

    warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
    audio_file = models.FileField(upload_to='audio')

    def __str__(self):
        return self.warehouse.word
    def delete_media(self):
        os.remove(path=MEDIA_ROOT + '/' + str(self.audio_file))

query.py

def get_words_warehouse_matching(search_sting):
    try:
        dictionary_object = Warehouse.objects.filter(Q(word__icontains = search_sting)|Q(type__icontains=search_sting) | Q(gender__icontains=search_sting)|Q(synonyms__icontains=search_sting)|Q(antonyms__icontains=search_sting)
        words_list = []
        for words in dictionary_object.iterator():
            word_dictionary = {'id':words.id, 'word': words.word, 'meaning': words.meaning,     'synonyms': words.synonyms,'antonyms': words.antonyms}    
            words_list.append(word_dictionary)      
        return words_list

                   

views.py

def search(request):
context = {}
warehouse={}
if request.method == 'POST':
    context['data'] = get_words_by_matching(request.POST['searchString'])
    context['warehouse'] = get_words_warehouse_matching(request.POST['searchString'])
    voice = Audio.objects.filter(warehouse_id = warehouse.id)
    context['audio'] = voice
return render(request, 'dictionary/word.html', context)

Мне нужно отобразить связанный аудиофайл в шаблоне, поэтому мне нужно приравнять warehouse_id к Warehouse.id. Как я могу получить id из get_words_warehouse_matching (словарь), чтобы я мог использовать
. filter(warehouse_id = warehouse.id) в представлениях. Или если есть какие-либо другие лучшие варианты, предложения будут высоко оценены. Заранее спасибо.

Похоже, вам просто нужно сделать запрос к вашей модели Audio.

q = Q(warehouse__word__icontains = search_sting)|Q(warehouse__type__icontains=search_sting) | Q(warehouse__gender__icontains=search_sting)|Q(warehouse__synonyms__icontains=search_sting)|Q(warehouse__antonyms__icontains=search_sting)
context['audio'] = Audio.objects.filter(q)

Затем вы можете получить доступ к этим данным в шаблоне, как показано ниже:

{% for aud in audio %}
    {{ aud.warehouse.id }}
    {{ aud.warehouse.word }}
    {{ aud.warehouse.meaning }}
    ....
{% endfor %}

Я решил эту проблему, изменив запрос следующим образом:

context = {}
    if request.method == 'POST':
        context['data'] = get_words_by_matching(request.POST['searchString'])
        warehouse_val = get_words_warehouse_matching(request.POST['searchString'])
        id=warehouse_val[0]['id']
        context['warehouse'] = get_words_warehouse_matching(request.POST['searchString'])
        context['audio'] = Audio.objects.filter(warehouse_id=id)

    return render(request, 'dictionary/word.html', context)

Может ли кто-нибудь подсказать мне, является ли это лучшим решением или я могу сделать что-то другое, чтобы мой запрос был более эффективным. Спасибо

Вернуться на верх