Skip to content

Instantly share code, notes, and snippets.

@felipe-prenholato
Last active December 15, 2015 08:19
Show Gist options
  • Save felipe-prenholato/5230231 to your computer and use it in GitHub Desktop.
Save felipe-prenholato/5230231 to your computer and use it in GitHub Desktop.
Exemplo usado em lista de discussão para mostrar uma relação com um model e como obter ela sem fazer muita query.
>>> from posts.models import User, Post, Amigos
>>> # Cria joao
>>> joao = User(username="joao", first_name="João", email="[email protected]")
>>> joao.save()
>>> # Cria jose
>>> jose = User(username="jose", first_name="José", email="[email protected]")
>>> jose.save()
>>> # Cria maria
>>> maria = User(username="maria", first_name="Maria", email="[email protected]")
>>> maria.save()
>>> # post de jose
>>> post = Post(autor=jose)
>>> post.save()
>>> # post de maria
>>> post2 = Post(autor=maria)
>>> post2.save()
>>> # joao vira amigo de jose
>>> amizade1 = Amigos(membro=joao, amigo=jose)
>>> amizade1.save()
>>> # maria vira amiga de jose ... so cute <3
>>> amizade2 = Amigos(membro=joao, amigo=maria)
>>> amizade2.save()
>>> # neste caso joao é um user instance, vai ser o caso do request.user.
>>> joao
>>> <User: joao>
>>> # Pega amigos de joão. amigos de joao é uma lista de ids neste exemplo
>>> amigos_joao = joao.amigos.values_list('amigo_id', flat=True)
>>> amigos_joao
>>> [15841L, 15842L]
>>> # Pega os posts dos amigos do joao
>>> Post.objects.filter(autor__in=amigos_joao).values('pk', 'autor__first_name')
>>> [{'pk': 1L, 'autor__first_name': u'Jos\xe9'}, {'pk': 2L, 'autor__first_name': u'Maria'}]
# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, unicode_literals)
from django.db import models
# vou considerar uso do Django 1.4, e o User sendo o tal membro.
from django.contrib.auth.models import User
class Post(models.Model):
autor = models.ForeignKey(User, related_name='posts')
# ...
class Amigos(models.Model):
membro = models.ForeignKey(User, related_name='amigos')
amigo = models.ForeignKey(User, related_name='+') # + ai nao deixa ter relação reversa no model User
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment