Форум сайта python.su
Помогите. Делаю на django небольшое веб приложение основанное на работе с БД mysql. Есть две таблицы, связанные по типу многие ко многим третьей таблицей. В первой храняться названия производителей автомобилей (Audi, Alfa Romeo), во втрой модели автомобилей этих прозводителей (A4, Giulietta…), в третьей id полей предыдущих двух. Нужно вывести в index.html производителей, у меня их сейчас два, значит только два поля, в details.html модели автомобилей, производителя, который был выбран на index.html.
Я в models.py сделал класс для моделей, класс для связной таблицы, в котором через ForeignKey импортировал из класса моделей название и класс производителей, в котором импортировал из класса связной таблицы импортровал имя моделей по id. В index.html через for вывел производителей, в details.html через for попытался вывести модели по id производителя. Но, выводит не совсем то.
Код в приложении. Помогите, пожалуйста_) А то не первый день бьюсь, видно замылились мысли.
models.py
from django.db import models class model(models.Model): name = models.CharField(max_length=50) # manufacturers = models.ManyToManyField(manufacturer, through='replication') def __unicode__(self): return u'%s' % self.name class replication(models.Model): model = models.ForeignKey(model, db_column='model_id') # manufacturer = models.ForeignKey(manufacturer, db_column='manufacturer_id') year = models.CharField(max_length=50, db_column='year') name = models.CharField(max_length=50, db_column='model_id') # def __unicode__(self): # return u'%s' % self.name def __unicode__(self): return u'%s' % self.name class manufacturer(models.Model): name = models.CharField(max_length=50) model = models.ForeignKey(replication, db_column='id') # model = models.ForeignKey(model) def __unicode__(self): return u'%s' % self.name from django.contrib import admin admin.site.register(manufacturer) admin.site.register(model) admin.site.register(replication)
[code python]from tab.models import replication
from django.http import HttpResponse
from django.template import Context, loader
from tab.models import manufacturer
def index(request):
entries = manufacturer.objects.all()
template = loader.get_template('tab/index.html')
context = Context({'entries': entries})
return HttpResponse(template.render(context))
def details(request, id):
entries = manufacturer.objects.get(pk=model)
template = loader.get_template('tab/details.html')
context = Context({'entries': entries})
return HttpResponse(template.render(context))[/code]
[code python]<html>
<head>
<title>{{ entry.name }}</title>
</head>
<body>
<h1>{{ entry.name }}</h1>
<ul>
{% for entry in entries %}
<li>
<i>{{ entry.id }},{{ entry.name }}</i> -
{{ entry.model }}
</li>
{% endfor %}
</ul>
</body>
</html>[/code]
[code html]<html>
<head>
<title>Список</title>
</head>
<body>
<ul>
{% for entry in entries %}
<li>
<i>{{ entry.id }}</i> -
<a href='/tab/details/{{ entry.pk }}/'>{{ entry.name }}</a>
</li>
{% endfor %}
</ul>
</body>
</html>[/code]
Отредактировано Wojaovlad (Ноя. 4, 2014 13:22:05)
Офлайн
В views.details попробуйте изменить запрос
entries = manufacturer.objects.filter(model=id)
Офлайн
alexsis
В views.details попробуйте изменить запрос
Офлайн
entries =replication.objects.filter(model=id)
Офлайн
alexsis
Офлайн
Правильная модель
class model(models.Model): name = models.CharField(max_length=50) manufacturers = models.ManyToManyField(manufacturer, through='replication')
Офлайн
scopicholСвязь многие ко многим организована в БД, через дополнительную таблицу (replication).
Правильная модель
NameError: name 'manufacturer' is not defined
Офлайн
WojaovladКакой смысл у этой связи?
Связь многие ко многим организована в БД, через дополнительную таблицу (replication).
Помогает перестановка класса manufacturer перед классом model. Можно как-то побороть?И зачем это бороть. Это логично что manufacturer обьявлен раньше чем model.
Офлайн
scopichol
Офлайн
Куда еще подталкивать? Я вроде все написал
ТОлько что заметил опечатку. Многие ко многим не нужно
manufacturer = models.ForeignKey(manufacturer)
item = manufacturers.objects.filter(pk=id) entries = item.model_set.all()
Отредактировано scopichol (Ноя. 5, 2014 17:08:43)
Офлайн