Teste

teste

quinta-feira, 16 de agosto de 2007

Django RDF Avançado

Eu me deparei com uma situação em que precisava gerar dois RDFs, um seria o Mestre e o outro Detalhe (Tipo nota e itens da nota). Para gerar o Mestre foi simples, basta usar a técnica padrão, mais a parte do Detalhe é um pouco diferente.

O models:
class Modulos( models.Model):
nome = models.CharField(maxlength=50)
descricao = models.CharField(maxlength=2048)

def __str__(self):
return self.nome

class SubModulos(models.Model):
modulo = models.ForeignKey(Modulos, related_name='sub_set')
nome = models.CharField(maxlength=50)
descricao = models.CharField(maxlength=2048)

def __str__(self):
return self.nome
Baseado no modelo acima, podemos observar que a class Modulos já carrega automaticamente os SubModulos, então quando vamos gerar o nosso RDF basta passar a class Modulos como parâmetro e fazer o seguinte no nosso template Cheetah:
<?xml version="1.0" encoding="ISO-8859-1"?>
#from modulos.start.models import Modulos, SubModulos
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:TABELA=" http://www.algoritmoweb.com.br/rdf#">
<RDF:Bag RDF:about="urn:tabela">
#for $item in $list
#set $m = $Modulos.objects.get(pk=$item.id)
#set $s = $m.sub_set.all()
#for $sub in $s
<RDF:li>
<RDF:Description>
<TABELA:id>$!sub.id</TABELA:id>
<TABELA:nome>$!sub.nome</TABELA:nome>
<TABELA:idModulo>$!m.id</TABELA:idModulo>
<TABELA:moduloNome>$!m.nome</TABELA:moduloNome>
<TABELA:descricao>$!sub.descricao</TABELA:descricao>
</RDF:Description>
</RDF:li>
#end for
#end for
</RDF:Bag>
</RDF:RDF>
Observe que o processamento fica a cargo do Cheetah, usando dois #for, um para ler os itens do Modulo e o outro para pegar todos os SubModulos.

Espero ter ajudado.
Orlando Cesar

Nenhum comentário: