All work and no play makes Jack a dull boy

sexta-feira, 23 de maio de 2014

Limitar número de instâncias num modelo do Django

Como ter apenas um registro num modelo do Django?

É possível fazer através da validação de model do próprio Django.
from django.core.exceptions import ValidationError

def validate_only_one_instance(obj):
    model = obj.__class__
    nome_modelo = model.__name__
    if (model.objects.count() > 0 and obj.id != model.objects.get().id):
        raise ValidationError("Modelo %s limitado a 1 instancia" % nome_modelo)
E no seu modelo:
from django.core.exceptions import models

class Exemplo(models.Model):
    campo = CharField()
    inteiro = IntegerField()

    def clean(self):
        validate_only_one_instance(self)
        
Veja que, dessa forma, você não impede a tentativa de criar, mas evita que a criação prossiga.

Fonte

sábado, 17 de maio de 2014

Destacar linhas do git no Sublime

Um dia, pensando em um pacote ou plugin para o Sublime que mostrasse apenas as linhas que o git destacará, encontrei o GitGutter.

A instalação é o padrão e o resultado...



São destaques diferentes para criação, alteração e exclusão de linhas e ainda possui atalhos para navegar de um ponto a outro.

quinta-feira, 15 de maio de 2014

Serializar formulário sem jquery

Como posso serializar um formulário com javascript?

O javascript não possui o método .serialize() do jQuery para criar uma query string dos valores inseridos em um formulário. Porém há uma solução

(function() {
 function serialize( form ) {
  var data = [];
  var elements = form.querySelectorAll( "input, select, textarea" );
  for( var i = 0; i < elements.length; ++i ) {
   var element = elements[i];
   var name = element.name;
   var value = element.value;
   var str = name + "=" + value;
   data.push( str ); 
  }
  return data.join( "&" );
 }

 document.addEventListener( "DOMContentLoaded", function() {
  var form = document.getElementById( "test" );
  
  form.addEventListener( "submit", function( e ) {
   e.preventDefault();
   var queryString = serialize( this );
  }, false);
 });
})();

Essa técnica se mostra fundamental com AJAX

Traduzido daqui e via @pinceladasweb