id = models.IntegerField ( primary_key=True )
FullName
class Person(models.Model):
full_name = models.CharField( default=u"Иванов И.И.", max_length=256 )
# ...
parent = models.ForeighKey('self', blank=True, null=True)
# or
# parent = models.ForeighKey("Person", blank=True, null=True)
то это перестроение всего одного индекса
class AccessoriesNode(models.Model):
accessories_view_eq = models.ForeignKey(
AccessoriesViewEq, verbose_name=u"Оборудование", blank=True, null=True)
access_name_node = models.CharField("Узлы:", max_length=100, blank=True, null=True)
def __unicode__(self):
return u'{node} {plot} {view}'.format(
node=self.accessories_view_eq.access_name_node,
plot=self.accessories_view_eq.accessories_plot,
view=self.access_name_view
)
class Meta:
verbose_name_plural = _(u"Справочник ВПР - 3.Узлы оборудования")
ordering = ['accessories_view_eq']
from os import path, getenv
#....
# base dir отличается от дефолтного принятого в 1.6
# возможно понадобиться поправить пути в других местах
BASE_DIR = path.abspath(path.join(path.dirname(__file__), '../..'))
#....
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': path.join(BASE_DIR, 'db.sqlite3'),
}
}
Что за проблема с кодировками?
class PostsListView(ListView):
queryset = Post.objects.all().order_by('-datetime')
# context_object_name это та переменная о которой я говорил выше
# можно задать свое имя
# context_object_name = "car_list"
paginate_by = 10 # количество постов на страницу
class Post(models.Model):
title = models.CharField(max_length=255)
datetime = models.DateTimeField(u'Дата публикации')
content = models.TextField(max_length=10000)
# было
# def unicode(self):
# return self.title
# Надо
def __unicode__(self):
return self.title
# было
# def get_absolute_url(self):
# return "/blog/%i/" % self.id
# а стоит использовать всю магию джанго
# в urls.py есть вот такое
# url(r'^/blog/(?P<pk>\d+)/$', PostDetailView.as_view(), name='blog_post'),
# и можно сделать так, чтобы любое изменение urls.py было подхвачено
# в модели автоматом
# те модель сама узнает как стоит делать ссылку на блогпост
@models.permalink
def get_absolute_url(self):
return 'blog_post', (), {'pk': self.pk}
{% if is_paginated %}
<ul class="pagination">
{% if post_list.number != post_list.previous_page_number %}
<li><a href="?page={{ post_list.previous_page_number }}">←</a></li>
{% endif %}
{% for page in post_list.paginator.page_range %}
{% if page != post_list.number %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% else %}
<li class="active">{{ page }}</li>
{% endif %}
{% endfor %}
{% if post_list.number != post_list.next_page_number %}
<li><a href="?page={{ post_list.next_page_number }}">→</a></li>
{% endif %}
</ul>
{% endif %}
class PostsListView(ListView):
queryset = Post.objects.all().order_by('datetime')
{{ STATIC_URL }}
<!DOCTYPE HTML>
<meta charset="utf-8">
<link href="{% static "bootstrap/css/bootstrap-responsive.css" %}" rel="stylesheet">
<script src="{% static "bootstrap/js/bootstrap.js" %}"></script>
{% load staticfiles %}
# chmod-socket = 664
BASE_DIR = path.abspath(path.join(path.dirname(__file__), '..')) # выходим за пределы директории "проекта"
TEMPLATE_DIRS = (
path.join(BASE_DIR, 'templates') # порядок сложения путей важен!
)
class TextTemplate(models.Model):
....
def get_absolute_file_upload_url(self):
return MEDIA_URL + self.file_upload.url
#urls.py
...
urlpatterns = patterns(
'',
url(r'^text-template/(?P<primary_key>\d+)/$', get_tt),
url(r'^text-template/$', get_all_tt),
)
...
#view.py
def get_tt(request, primary_key):
tt_item = TextTemplate.objects.get(pk=primary_key)
# or
# tt_item = get_or_404(TextTemplate, pk=primary_key)
print tt_item.file_upload.url
return render('t.html', {'tt': tt_item})
def get_all_tt(request):
tt_all = TextTemplate.objects.all()
for tt_item in tt_all:
print tt_item.file_upload.url
return render('tt-all.html', {'tt': tt_all})
#t.html
<img src="{{ MEDIA_URL }}{{ tt.url }}">
<br>
<img src="{{ tt.get_absolute_file_upload_url }}">
#tt-all.html
{% for tt in tt_all %}
<img src="{{ tt.get_absolute_file_upload_url }}">
{% endfor %}
Options.unique_together
Sets of field names that, taken together, must be unique:
unique_together = (("driver", "restaurant"),)
This is a tuple of tuples that must be unique when considered together. It’s used in the Django admin and is enforced at the database level (i.e., the appropriate UNIQUE statements are included in the CREATE TABLE statement).
For convenience, unique_together can be a single tuple when dealing with a single set of fields:
unique_together = ("driver", "restaurant")
class TTest(models.Model):
t1 = models.IntegerField()
t2 = models.IntegerField()
class Meta:
unique_together = ('t1', 't2')
$python manage.py sql ttest
BEGIN;
CREATE TABLE "ttest_ttest" (
"id" integer NOT NULL PRIMARY KEY,
"t1" integer NOT NULL,
"t2" integer NOT NULL,
UNIQUE ("t1", "t2")
)
;
COMMIT;