Как правильно совмещать поля из разных таблиц в Django?

Подскажите пожалуйста как правильно совместить в выводе поля из двух разных таблиц по уникальному идентификатору. Одна из этих таблиц формируется внешней программой.
Каждая запись из первой таблицы соответствует одной записи во второй таблице.
Таблица I
action_id
name
action
data


Таблица II
action_id
result

В итоге мне нужно вывести на страницу таблицу составленную из полей: name, data, result

Не прошу готовый код, прошу просто описать как это правильно делается на Django.
Только начал знакомиться с фреймворком, пока слабо понимаю что к чему.
  • Вопрос задан
  • 2939 просмотров
Решения вопроса 1
koef
@koef Автор вопроса
Вот как у меня получилось.

models.py:
...
class Action(models.Model):
    action = models.CharField('Действие', max_length=13)
    name = models.CharField('ФИО', max_length=200)
    data = models.DecimalField('Данные', decimal_places=2, max_digits=8)

    class Meta:
        db_table = 'actions'  # задаем свое имя таблицы в базе для этого класса

    def __unicode__(self):
        return unicode(self.clientid)


class ActionResult(models.Model):
    action = models.OneToOneField('Action', to_field='id', related_name='actionresult', primary_key=True,
                                       db_column='action_id')
    result = models.CharField('Итог', max_length=45)

    class Meta:
        db_table = 'results'  # задаем свое имя таблицы в базе для этого класса
        managed = False

    def __unicode__(self):
        return unicode(self.src)


urls.py:
urlpatterns = patterns('',
...
    url(r'^history/$', views.history, name='history'),
...
)


views.py:
def history(request):
    last_hist = myapp.models.action.objects.all()
    context = {
        'last_hist': last_hist,
    }
    return render(request, 'myapp/index.html', context)


index.html:
{% if last_hist %}
    <table width="60%" border="1" cellpadding="4">
        <tr align="right" valign="top">
            <td>Имя</td>
            <td>Данные</td>
            <td>Результат</td>
    {% for act in last_hist %}
        <tr align="right" valign="top">
            <td>{{ act.name }}</td>
            <td>{{ act.data }}</td>
            <td>{{ act.actionresult.result }}</td>
        </tr>
    {% endfor %}
    </table>
{% else %}
    <p>No actions are available.</p>
{% endif %}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Начни отсюда https://docs.djangoproject.com/en/1.8/howto/legacy...
возможно магия сработает

А вообще похоже на странную связь типа OneToOneField или ForeignKey

А когда у тебя будет модель, предположительно в виде

#models.py
class Blah1(Model):
   # action_id =pk
   name = TextField
   action = TextField 
   data = DataTime
   blah2 = OneToOneField('Blah2')

class Blah2(Model):
   # action_id =pk
   result = TextField

# urls.py
# ....
url(r'^show-blah/(?P<pk>\d+)$', view_show_blah, name="view_show_blah"),
# ....

#templates/show-blah.html
<body>
{{ blah }} <br>
{{ blah.name }} {{ blah.data }} {{ blah.blah2.result }} 
</body>

#views.py
def view_show_blah(request, pk):
     context = {'blah': get_object_or_404(Blah2, pk=pk)}
     return render(request, 'show-blah.html', context)


# код не тестился
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы