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;
<ins>———-</ins>——————-+———+——-+————-+
| Field | Type | Null | Key | Default |
<ins>———-</ins>——————-+———+——-+————-+
| id | int(11) | NO | <span class="caps">PRI</span> | <span class="caps">NULL</span> |
| nume | varchar(20) | NO | | <span class="caps">NULL</span> |
<ins>———-</ins>——————-+———+——-+————-+
mysql> describe revolution.blahg_post;
<ins>———————-</ins>——————-+———+——-+————-+
| Field | Type | Null | Key | Default |
<ins>———————-</ins>——————-+———+——-+————-+
| id | int(11) | NO | <span class="caps">PRI</span> | <span class="caps">NULL</span>
| title | varchar(50) | NO | | <span class="caps">NULL</span> |
| body | longtext | NO | | <span class="caps">NULL</span> |
| category_id | int(11) | NO | <span class="caps">MUL</span> | <span class="caps">NULL</span> |
| published | tinyint(1) | NO | | <span class="caps">NULL</span> |
| creation_time | datetime | NO | | <span class="caps">NULL</span> |
| modified_time | datetime | NO | | <span class="caps">NULL</span> |
<ins>———————-</ins>——————-+———+——-+————-+
mysql> describe revolution.blahg_commentator;
<ins>————-</ins>———————+———+——-+————-+
| Field | Type | Null | Key | Default |
<ins>————-</ins>———————+———+——-+————-+
| id | int(11) | NO | <span class="caps">PRI</span> | <span class="caps">NULL</span> |
| name | varchar(50) | NO | <span class="caps">UNI</span> | <span class="caps">NULL</span> |
| email | varchar(50) | NO | <span class="caps">UNI</span> | <span class="caps">NULL</span> |
| website | varchar(200) | NO | | <span class="caps">NULL</span> |
<ins>————-</ins>———————+———+——-+————-+
mysql> describe revolution.blahg_comment;
<ins>———————-</ins>——————+———+——-+————-+
| Field | Type | Null | Key | Default |
<ins>———————-</ins>——————+———+——-+————-+
| id | int(11) | NO | <span class="caps">PRI</span> | <span class="caps">NULL</span> |
| body | longtext | NO | | <span class="caps">NULL</span> |
| post_id | int(11) | NO | <span class="caps">MUL</span> | <span class="caps">NULL</span> |
| author_id | int(11) | NO | <span class="caps">MUL</span> | <span class="caps">NULL</span> |
| approved | tinyint(1) | NO | | <span class="caps">NULL</span> |
| modified_time | datetime | NO | | <span class="caps">NULL</span> |
<ins>———————-</ins>——————+———+——-+————-+
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!