blog database schema cu capsuni - Part 2
Monday, September 22, 2008
Tocmai am reușit (am găsit timp — furat timp) să scriu în django schema din postul trecut. Simplicity is divine:
from django.db import models
class Category(models.Model):
nume = models.CharField(max_length=20)
class Post(models.Model):
title = models.CharField(max_length=50)
body = models.TextField()
category = models.ForeignKey(Category)
published = models.BooleanField()
creation_time = models.DateTimeField(auto_now_add=True)
class Commentator(models.Model):
name = models.CharField(max_length=50, unique=True)
email = models.EmailField(max_length=50, unique=True)
website = models.URLField(verify_exists=True)
class Comment(models.Model):
body = models.TextField()
post = models.ForeignKey(Post)
author = models.ForeignKey(Commentator)
approved = models.BooleanField()
modified_time = models.DateTimeField(auto_now=True)
Pe lângă faptul că toate tipurile de date au nume și explicații pe care le poate înțelege oricine, django va folosi datele astea atunci când va construi interfața de administrare.
E interesant că trebuie să declari toate tabelele în ordine. La început pusesem Categoria ultima și n-o găsea când vroia să facă ForeignKey-ul de la Post. M-a cam răsfățat OOP-ul.
Alt lucru fain e că de pe acum se pregătesc feature-uri interesante cum ar fi URLField.verify_exists care verifică toate url-urile introduse și le refuză dacă primește 404. Așa că de-acum n-o să mai poată nimeni să pună variabile metasintactice de genu: caca, mumu și altele în field-ul ăla!
Și acum un mysql describe3 pentru tabelele rezultate:
mysql> describe revolution.blahg_category;
+-------+-------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+-------+-------------+------+-----+---------+
| id | int(11) | NO | PRI | NULL |
| nume | varchar(20) | NO | | NULL |
+-------+-------------+------+-----+---------+
mysql> describe revolution.blahg_post;
+---------------+-------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------+-------------+------+-----+---------+
| id | int(11) | NO | PRI | NULL
| title | varchar(50) | NO | | NULL |
| body | longtext | NO | | NULL |
| category_id | int(11) | NO | MUL | NULL |
| published | tinyint(1) | NO | | NULL |
| creation_time | datetime | NO | | NULL |
| modified_time | datetime | NO | | NULL |
+---------------+-------------+------+-----+---------+
mysql> describe revolution.blahg_commentator;
+---------+--------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------+--------------+------+-----+---------+
| id | int(11) | NO | PRI | NULL |
| name | varchar(50) | NO | UNI | NULL |
| email | varchar(50) | NO | UNI | NULL |
| website | varchar(200) | NO | | NULL |
+---------+--------------+------+-----+---------+
mysql> describe revolution.blahg_comment;
+---------------+------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------+------------+------+-----+---------+
| id | int(11) | NO | PRI | NULL |
| body | longtext | NO | | NULL |
| post_id | int(11) | NO | MUL | NULL |
| author_id | int(11) | NO | MUL | NULL |
| approved | tinyint(1) | NO | | NULL |
| modified_time | datetime | NO | | NULL |
+---------------+------------+------+-----+---------+
TADA!
Trebuie să studiez de ce se strică formatarea (de fapt știu de ce, trebuie să scot textile din blockul ăla), dar ideea de bază e clară.
3merci gheorghe!