我使用xampp(它有mysql)
我对这个django关系感到困惑, 谁可以给我一个代码示例(或文本)让我觉得它直观。谢谢 (如:爱因斯坦所描述的相对论)
答案 0 :(得分:1)
我仔细查看了关系的简单解释,但找不到任何内容,所以我会在这里总结一下。
关系并非严格意义上的Django。如果您真的想了解Django正在做什么,请了解一般的数据库概念。
如果您有多个信息表,则需要以某种方式链接它们。如果您经营像last.fm这样的音乐网站,您将需要了解艺术家,流派,标签,歌曲,专辑等。所有这些数据都以某种方式相关。
例如,一位艺术家将拥有许多专辑(一对多),一种类型将适用于许多艺术家(一对多)。 Metallica(一位艺术家)将有几张专辑,Black Album,St. Anger等,但一张专辑可能不属于两位艺术家,例如Alicia Keys和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)
标签将描述几位艺术家(例如Metal描述Metallica,Pantera和Sepultura),一位艺术家将有几个标签(例如人们可能将Metallica标记为Metal,Rock和80s Metal。)这种数据之间的关系可能会产生三张桌子。艺术家表,标签表和连接表。您的连接记录将看起来像这样(纯虚构和假设情况)
| id | artist_id | tag_id |
| 1 | 34 | 357 |
| 2 | 98 | 234 |
34的artist_id可能是Metallica,而357的tag_id可能是Metal。关键是,有一个表格可以链接标签和艺术家。在这个例子中。
通常,关系是链接记录的一种方式。主要有三种关系,一对一,多对多,多对一。
完全理解这一点的最好方法是学习Database Design。
答案 1 :(得分:0)
很难回答一个困惑的感觉问题,但是如果你想要代码或许尝试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()