[django] Django Tips

移転しました。

Djangoのドキュメントにのっているけど、自分用に覚えておきたいための
Django Tips を書いとく。自分用のメモ

複数列をユニーク指定

modelのMetaクラスにunique_togetherを指定

class Meta:
    unique_together = (('user1','user2'),)

SQLデバッグ

djangoで実行している生のSQLを見る

from django.db import connection
print connection.queries

複雑なSQLを作る例

(A AND B) OR (C AND D)
foo = Foo.objects.filter(
   Q(a=a_value,b=b_value) | Q(c=c_value,d=d_value)
)

jQueryとDjangoでJSON形式でサーバから返したリストデータをセレクトメニューに表示

参考URLそのまま
views.py

from django.core import serializers
from django.http import HttpResponse
from testapp.main.models import *
...
def models_reload(request):
    model_list = Model.objects.all()
    data = serializers.serialize("json", model_list[:30], ensure_ascii=False)
    return HttpResponse(data, mimetype="text/javascript")

select.html

{% extends "user/base.html" %}

{% block additional_js %}
<script type="text/javascript" src="/static/javascripts/jquery-1.1.3.1.pack.js"></script>
<script type="text/javascript">
      function reloadModels() {
          $("#id_models").empty();
          $.ajax({
              type: "GET",
              url: "/models/reload/",
              data: {},
              dataType: "json",
              success: function(response) {
                  $.each(response, function(i) {
                      model = this;

                      row = "<option value='" + model.pk + "'>";
                      row += model.fields.name;
                      row += "</option>";
                      $(row).appendTo("#id_models");
                  });
              }
          });
      }

      $(function() {
          reloadPlaces();
      });
</script>
{% endblock %}

{% block main_content %}

<select size="8" id="id_models" name="model" style="width: 500px;"></select>

{% endblock %}