O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django
Depois de ativar o Django-admin e criar algumas armas e armaduras, percebi que os itens não tem nome.
Como os usuários vão saber quais são os itens que eles possuem. Apenas pelas fotos?
No Django-admin, os itens aparecem como “armadura-object” ou “arma-object”.
Não seria muito mais legals que os itens aparecessem com o nome certo?
Primeiro vamos colocar o nome nos itens.
Basta ir no models.py da app de itens e incluir um novo campo para as Armas e para as Armaduras.
Pense na dificuldade…
from django.db import models class Arma(models.Model): poder = models.PositiveSmallIntegerField() compra = models.FloatField() # valor de compra venda = models.FloatField() # valor de venda secreta = models.BooleanField(default=False) #se a arma eh secreta ou disponivel na loja imagem = models.ImageField(upload_to="armas") #imagem do item #nome do item nome = models.TextField() class Armadura(models.Model): poder = models.PositiveSmallIntegerField() compra = models.FloatField() # valor de compra venda = models.FloatField() # valor de venda secreta = models.BooleanField(default=False) #se a armadura eh secreta ou disponivel na loja imagem = models.ImageField(upload_to="armaduras") #imagem do item #nome do item nome = models.TextField()
Atualizamos o nosso banco de dados com o comando syncdb.
python manage.py syncdb
Acabamos de adicionar um novo campo em cada modelo, só falta resolver o problema de, no Django-admin, mostrar o nome “object” ao invés de exibir o nome do item.
Para isso, precisamos criar dentro de cada classe que define um item – a classe Arma e a classe Armadura – o método de nome __unicode__, fazendo-o retornar o campo nome.
Nosso models.py vai ficar assim:
from django.db import models class Arma(models.Model): poder = models.PositiveSmallIntegerField() compra = models.FloatField() # valor de compra venda = models.FloatField() # valor de venda secreta = models.BooleanField(default=False) #se a arma eh secreta ou disponivel na loja imagem = models.ImageField(upload_to="armas") #imagem do item #nome do item nome = models.TextField() def __unicode__(self): return self.nome class Armadura(models.Model): poder = models.PositiveSmallIntegerField() compra = models.FloatField() # valor de compra venda = models.FloatField() # valor de venda secreta = models.BooleanField(default=False) #se a armadura eh secreta ou disponivel na loja imagem = models.ImageField(upload_to="armaduras") #imagem do item #nome do item nome = models.TextField() def __unicode__(self): return self.nome
O que fizemos foi dizer ao Django que sempre que precisar nomear o objeto, utilize o campo self.nome.
Novamente, precisamos executar o comando syncdb.
python manage.py syncdb
E pronto, basta acessar o django-admin e ver os novos campos criados e os novos nomes dos itens.
O código fonte do projeto encontra-se em:
https://github.com/frenetic/django-wars