2012-11-10 13 views
13

Mi chiedo se ciò che segue è il modo corretto di creare sistema di etichettatura per le immagini e di essere in grado di rendere una tag cloud:Django modello di modifica Disegno

from django.db import models 

class Tag(models.Model): 
    word  = models.CharField(max_length=35) 
    slug  = models.CharField(max_length=250) 
    created_at = models.DateTimeField(auto_now_add=False) 

    def __unicode__(self): 
     return self.word 

class Photo(models.Model): 
    slug    = models.CharField(max_length=250) 
    filename   = models.CharField(max_length=200) 
    extension   = models.CharField(max_length=4) 
    size    = models.IntegerField() 
    ... 
    tags    = models.ManyToManyField(Tag) 

    def __unicode__(self): 
     return self.slug 

Nota che la mia tabella del database includerà milioni di righe e ogni immagine avrà 4-8 tag.

Si prega di avvisare.

+0

So che questo è stato un po 'di tempo fa, ma faresti mente spiegando perché hai messo un campo di lumaca in Tag? Voglio dire, qual è lo scopo. Genuinamente curioso. – Nifled

risposta

18

Se tutto ciò che si vuole fare è creare un tag cloud, allora quel modello di dati dovrebbe essere sufficiente. Vorrei apportare una modifica:

tags = models.ManyToManyField(Tag,related_name='photos') 

Ciò renderà le ricerche inverse in foto viste più pulite da leggere e più facili da ricordare.

Tuttavia, prenderei in considerazione altri casi di utilizzo per i tag. Un tag cloud è l'unica cosa per cui vuoi usare il tagging? Esistono metadati che la relazione dovrebbe contenere?

Se si prevede di avere milioni di righe, la memorizzazione nella cache sarà importante quanto il modello di dati.

Inoltre, per evitare di reinventare la ruota, vedere se qualcun altro ha costruito una libreria che serve gli scopi: http://www.djangopackages.com/grids/g/tagging/

Edit: Spelling

+0

+1 per indicare i pacchetti django esistenti. –

+0

sì, mi piace questo: http://django-taggit.readthedocs.io/en/stable/getting_started.html – Tsangares