Как я могу получить более интуитивное ощущение отношений с Django (например, «многие к одному», «многие ко многим») - PullRequest
0 голосов
/ 26 декабря 2009

я использую xampp (у него есть mysql)

Я был сбит с толку в этих отношениях с Джанго, кто может дать мне пример кода (или текст), чтобы я чувствовал это интуитивно. спасибо (например: Эйнштейн описал теорию относительности)

Ответы [ 2 ]

1 голос
/ 26 декабря 2009

Я искал простое объяснение отношений, но не смог ничего найти, поэтому постараюсь обобщить его здесь.

Отношения не являются чем-то вроде Джанго. Если вы действительно хотите понять, что делает Django, узнайте о концепциях базы данных в целом.


Когда у вас есть несколько таблиц информации, вам нужно как-то связать их. Если вы работаете с музыкальным сайтом, таким как last.fm, вам нужно будет узнать об исполнителях, жанрах, тегах, песнях, альбомах и т. Д. Все эти данные как-то связаны.

Например, у одного исполнителя будет много альбомов (один ко многим), один жанр будет применяться ко многим исполнителям (один ко многим), например. У Metallica (одного исполнителя) будет несколько альбомов, Black Album, St. Anger и т. Д., Но один альбом, вероятно, не будет принадлежать двум исполнителям, например Алисия Киз и Metallica записывают один и тот же альбом. Чтобы достичь этого отношения, каждая запись в альбоме должна иметь artist_id, чтобы указать, к какому исполнителю она относится.

mysql> select * from albums where artist_id = 40;
+-----+------------------------------+------+---------------------+-----------+----------+------------+
| id  | name                         | year | created_at          | artist_id | genre_id | updated_at |
+-----+------------------------------+------+---------------------+-----------+----------+------------+
| 309 | Reise, Reise                 | 2004 | 2009-11-22 16:01:13 |        40 |        2 | NULL       | 
| 310 | Mutter                       | 2001 | 2009-11-22 16:12:28 |        40 |        2 | NULL       | 
| 311 | Sehnsucht                    | 1998 | 2009-11-22 16:20:22 |        40 |        2 | NULL       | 
| 312 | Live aus Berlin              | 1999 | 2009-11-22 16:29:11 |        40 |        2 | NULL       | 
| 313 | Rosenrot                     | 2005 | 2009-11-22 16:40:43 |        40 |        4 | NULL       | 
| 314 | The Very Best of Rammstein   |    0 | 2009-11-22 16:51:38 |        40 |        2 | NULL       | 
| 315 | Live aus Berlin (bonus disc) |    0 | 2009-11-22 17:05:24 |        40 |        2 | NULL       | 
+-----+------------------------------+------+---------------------+-----------+----------+------------+
7 rows in set (0.02 sec)

Тег будет описывать нескольких исполнителей (например, Металл описывает Metallica, Pantera и Sepultura), а один исполнитель будет иметь несколько тегов (например, люди могут пометить Metallica как Металл, Рок и Металл 80-х.) Такого рода отношения между данными вероятно, будет производить три таблицы. Таблица художников, таблица тегов и таблица соединений. Например, ваши записи о присоединении будут выглядеть так (чисто воображаемая и гипотетическая ситуация)

| id | artist_id | tag_id |
| 1  | 34        | 357    |
| 2  | 98        | 234    |

artist_id из 34 может быть Metallica, а tag_id из 357 может быть Metal. Дело в том, что существует таблица, которая существует для связи тегов и исполнителей. В этом примере.

В общем, отношения - это способ связать записи. Существует три основных отношения: один к одному, многие ко многим и многие к одному.

Лучший способ полностью понять это - изучить Дизайн базы данных .

0 голосов
/ 26 декабря 2009

Трудно ответить на запутанный вопрос о чувстве, но если вы хотите код, возможно, попробуйте http://www.djangosnippets.org/

Также в учебном пособии приведены отличные примеры того, как модели работают в таких случаях, как многие ко многим, см. http://www.djangobook.com/en/1.0/chapter05/

Например:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(maxlength=30)
    address = models.CharField(maxlength=50)
    city = models.CharField(maxlength=60)
    state_province = models.CharField(maxlength=30)
    country = models.CharField(maxlength=50)
    website = models.URLField()

class Author(models.Model):
    salutation = models.CharField(maxlength=10)
    first_name = models.CharField(maxlength=30)
    last_name = models.CharField(maxlength=40)
    email = models.EmailField()
    headshot = models.ImageField(upload_to='/tmp')

class Book(models.Model):
    title = models.CharField(maxlength=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...