python manage.py syncdb
: Cria as
+ tabelas necessárias e adiciona os dados
+ necessários.python manage.py makemigrations
:
+ Verifica alterações em modelos e gera regras
+ para conversão do banco.python manage.py shell
: Shell de
+ acesso ao Django (na verdade, abre um
+ interpretador Python com um monte de coisas já
+ carregadas/configuradas)python manage.py runserver
: Roda
+ um server de desenvolvimento.O nome da relacionamento reverso pode ser alterado com
related_name
.
Queries onde todas as condições devem ser
+ satisfeitas podem ser feitas passando mais
+ parametros em filter
.
+all_expensive_fruits = Order.objects.filter(
+ products__name__like='fruit',
+ price__gt=1000)
+
+ Para queries com OR, deve-ser usar o objeto Q
.
+all_fruits_or_expensive = Order.objects.filter(
+ Q(products__name__like='fruit') |
+ Q(price__gt=1000))
+
+ Q
também pode ser usado para AND e queries mais
+ complexas.
+fruit_salad = Order.objects.filter(
+ Q(products__name__like='fruit') &
+ (Q(price__gt=1000) | Q(price=0))
+
+
+ É possível misturar Q
+ com filter normal, mas existe uma questão de
+ prioridades e é melhor nem pensar em misturar os
+ dois.
É possível definir valores fixos para campos com
+ choices
.
+class Order(models.Model):
+
+ """An order."""
+
+ CHOICES = (
+ ('M', 'Money'),
+ ('C', 'Credit card')
+ )
+
+ products = models.ManyToManyField(Product)
+ payment_type = models.CharField(max_length=1, choices=CHOICES)
+
+
+ O primeiro valor é o valor que será + registrado no banco; o segundo, apresentado num + ModelForm.
+Para as queries, é preciso pedir o valor do campo, não do display.
+ +
+credit_card_orders = Order.objects.filter(payment_type='C')
+
+ Para facilitar a vida, usar contantes.
+ +
+class Order(models.Model):
+
+ """An order."""
+
+ MONEY = 'M'
+ CREDIT_CARD = 'C'
+
+ CHOICES = (
+ (MONEY, 'Money'),
+ (CREDIT_CARD, 'Credit card')
+ )
+
+credit_card_orders = Order.objects.filter(
+ payment_type=Order.CREDIT_CARD)
+