Форум сайта python.su
Все привет
Подскажите, как получить кто с кем связан? Т.е. есть модель
class Publisher(models.Model):
title = models.CharField()
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
Офлайн
Не совсем понятно что и где вам нужно получить
b = Book.object.get(id=1)
b.authors #здесь авторы
b.publisher #здесь publisher
Отредактировано (Ноя. 17, 2010 08:19:34)
Офлайн
А не подойдет использовать inlines?
http://www.komtet.ru/info/django/vashe-pervoe-django-prilozhenie-chast-2/?searchterm=None (ближе к концу)
Насколько я помню (поправьте, если не прав), но отношение многие-ко-многим в базе признак того, что она не прошла нормализацию
Офлайн
ZiberbulgerСпасибо, но это не совсем то. Речь не про админку (если я в том месте прочитал)
svasСпасибо. Но вопрос у меня глобальный тогда, как мне кажется. Не надо меня отправлять к документации - читал и есть у меня пробел:
То что Вы написали мне понятно. Теперь вопрос: Каким образом мне необходимую детальную инфу о найденном мной объекте передать в шаблон?
Иначе говоря, есть форма поиска.
def search(request, model):
error = False
query = request.GET.get('q', '')
if query:
qset = (
Q(title__icontains=query)
)
results = model.objects.filter(qset).distinct()
else:
#results = []
return render_to_response('search.html', {'error' : True})
return render_to_response("search.html", {
"results": results,
"query": query
})
<form action="." method="GET">{% csrf_token %}
<label for="q">Search: </label>
<input type="text" name="q" value="{{ query|escape }}">
<input type="submit" value="Search">
</form>
{% if query %}
<h2>Results for "{{ query|escape }}":</h2>
{% if results %}
<ul>
{% for file in results|slice:":10" %}
<li><a href="{{ file.get_absolute_url }}">{{ file|escape }}</a></l1>
{% endfor %}
</ul>
{% else %}
<p>No files found</p>
{% endif %}
{% endif %}
Офлайн
ну во-первых:
results|slice:":10"
query = model.objects.all().select_related()
books = Book.objects.all().select_related()[:10]
return render_to_response('your_template.html', {'books':books})
<html>
...
<body>
{% for book in books %}
{{book.publisher.title}} <!-- выведет имя издателя -->
{% endfor %}
</body>
</html>
Офлайн
{{ book.authors.all.0.first_name }}
Офлайн
Igor ShmigoffНу у вас же в шаблоне в списке есть ссылки на отдельные страницы для каждой книги и автора. На данных страницах и выводите информацию
Далее, если я хочу кликнуть по найденному объекту и вывести всю инфу о нем (если это книга, то путь к ней, авторы), если объект автор - то все книги что он написал. Т.е. я понимаю примерно как, но с реализацией как то туговато.
{% for author in book.authors %}
{{ author }}
{% endfor %}
{% for book in author.book_set %}
{{ book }}
{% endfor %}
Офлайн
svasа по-моему джанго скажет, что объект many-to-many не поддается итерации{% for author in book.authors %} {{ author }} {% endfor %}
Отредактировано (Ноя. 18, 2010 15:35:43)
Офлайн
Да, вы правы. Надо наверное так
{% for author in book.authors.all %}
{{ author }}
{% endfor %}
{% for book in author.book_set.all %}
{{ book }}
{% endfor %}
Отредактировано (Ноя. 18, 2010 16:29:35)
Офлайн