Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2011 16:48:15

Соболев Андрей
От:
Зарегистрирован: 2011-04-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

По поводу select_related() в Django

Создаю мини-гостевую:

Модель:

class MessLevelOne(models.Model):
user = models.CharField(max_length=30)
datetime = models.DateTimeField()
message_text = models.CharField(max_length=400)
def __unicode__(self):
return '%s %s %s' % (self.user, self.datetime, self.message_text)

class MessLevelTwo(models.Model):
level_two_user = models.CharField(max_length=30)
level_two_datetime = models.DateTimeField()
level_two_message_text = models.CharField(max_length=400)
level_one = models.ForeignKey('MessLevelOne',related_name='level_one')
def __unicode__(self):
return '%s %s %s %s' % (self.level_two_user, self.level_two_datetime, self.level_two_message_text, self.level_one)
view.py
def gbook(request):      
mess_level_one = MessLevelOne.objects.all()
return render_to_response('standart/guestbook.html', locals(),context_instance=RequestContext(request))
А теперь самое интересное - шаблон вывода
{% for message in mess_level_one %}

<table bgcolor=orange>
<tr>
<td bgcolor=white> {{ message.id }}</td>
<td> {{ message.user }}</td>
<td>{{ message.datetime }}</td>
<td>{{ message.message_text }}</td>
<td>
[b] {% for mess in message.level_one.select_related %} [/b]
<table bgcolor=red>
<tr>
<td bgcolor=white> {{ forloop.parent.counter }}</td>
<td bgcolor=red> {{ mess.to_level_one_theme }} </td>
<td bgcolor=red>{{ mess.level_two_message_text }}</td>
</tr>
</table>
{% endfor %}
</td>
<td><a href=",,,"}">ответить</a></td>
</tr>
</table>

{% endfor %}
Собственно таким образом производится общая выборка из двух таблиц по условию MessLevelOne.objects.id = MessLevelTwo.objects.level_one

Вопрос в следующем - конструкция в шаблоне вида message.level_one.select_related является костылем?
Нигде в документации и на форумах я ничего подобного не нашел (плохо искал?).

ps: выполнение элементарной операции у меня заняло день чтения доков (которые в итоге не помогли), Джанга “рулит”



Отредактировано (Апрель 26, 2011 17:15:39)

Офлайн

#2 Апрель 26, 2011 22:21:48

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

По поводу select_related() в Django

Читайте внимательней документацию
http://docs.djangoproject.com/en/1.3/topics/db/queries/#following-relationships-backward
http://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related
Вам нужна первая ссылка. select_related для другого



Офлайн

#3 Апрель 27, 2011 09:46:35

Соболев Андрей
От:
Зарегистрирован: 2011-04-25
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

По поводу select_related() в Django

Разобрался, вот нужная ссылка.
http://docs.djangoproject.com/en/1.3/topics/templates/#accessing-method-calls

Ps. Если в качестве базы данных вы используете MySQL, не забудьте прописать в /etc/my.cnf

[mysqld]
default-storage-engine=InnoDB
перед выполнением команды python manage.py syncdb
(CentOS5)[



Отредактировано (Апрель 27, 2011 09:49:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version