2016-04-05 2 views
0

Итак, у меня есть домашняя страница, на которой отображаются изображения. Это доступно из моих таблиц изображений. Он содержит столбец владельца, в виде идентификатора пользователя. У меня также есть таблица пользователей, которые отправили эти изображения. Как сделать так, чтобы при отображении изображений он использовал идентификатор, чтобы получить имя пользователя из таблицы пользователя?Django получить данные из двух таблиц, только связанные данные

views.py:

def index(request): 
    context = {} 
    populateContext(request, context) 
    context.update(gallery=ImageDoc.objects.only('thumbfile').order_by('-id')) 

    return render(request, 'register/index.html', context) 

Так на странице index.html, я могу перебирать галерее '', чтобы показать изображения. Например:

{% for image in gallery %} 
    <a href="/logo/{{ image.slug }}"> 
     <img src="{{ MEDIA_URL }}{{ image.largethumbfile }}"> 
     {{ image.title }} by {{ image.username }} for {{ image.price }} 
    </a> 
{% endfor %} 

"image.username", очевидно, не работает. Я знаю, что нужно, чтобы получить доступ к таблице пользователей с этим:

get_users = User.objects.get() 

И переформатировать захватывая данные изображения для этого:

get_images = ImageDoc.objects.get() 

Но я не знаю, следующий шаг, чтобы обеспечить спички данных. Есть идеи? Спасибо!

+0

doens't {{image.owner.username}} работать? – Aquiles

+0

Пробовал, он не сработал. – Bob

+1

Если ваша модель использует внешний ключ у владельца, вы должны иметь к нему доступ, но обычно я не использую маршрут обновления контекста, я предпочитаю использовать render_to_response и передавать мои запросы через это. И вы должны использовать имя внешнего ключа в {{images.owner}} – Aquiles

ответ

0

Если таблица Images имеет таблицу Users в качестве внешнего ключа, то каждый объект Images будет иметь параметр user_id. Поэтому, если у вас есть значение, называемое given_user_id вы можете сделать что-то вроде:

Images.objects.get(user_id=given_user_id) 

Если у вас есть username вместо user_id, вы можете сделать что-то вроде:

Images.objects.get(user=User.objects.get(username=username)) 

К сожалению, вы не можете выполнить запросов внутри блока шаблонов. Вам нужно будет сделать какие-либо запросы перед тем, как передать объект контекста функции рендеринга.

+0

Спасибо за ответ! Это также должно работать. Но как насчет того, если у меня нет переменной «username»? В индексе я просто перечисляю все изображения вне зависимости от владельца. – Bob

+0

В идеале каждое изображение должно иметь связанный с ним объект User, не так ли? Вы могли бы создать объект dict, который отображает «Изображения» в «Пользователи/имена пользователей» и добавляет его в объект контекста. Или вы даже можете попробовать «image.user.username», не уверен, что это сработает с моей головы, но сделайте снимок. –

+0

А, спасибо! Я попробую это в будущем! – Bob

Смежные вопросы