2012-11-10 25 views
13

Zastanawiam się, czy po to poprawny sposób stworzyć system znakowania dla obrazów i jest w stanie uczynić chmurę tag:Django modelu Tag projekt

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 

Zauważ, że mój tabeli bazy danych będzie zawierać miliony wierszy i każdy obraz będzie miał 4-8 tagów.

Prosimy o radę.

+0

wiem, że to było dość dawno temu, ale byś Umysł wyjaśniający, dlaczego umieszczasz w tagu pole ślimaka? Mam na myśli, jaki jest cel. Naprawdę ciekawy. – Nifled

Odpowiedz

18

Jeśli wszystko, co chcesz zrobić, to stworzyć chmurę znaczników, to ten model danych powinien wystarczyć. Wprowadziłbym jedną modyfikację:

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

To spowoduje, że odczyty odwrotne w widokach zdjęć będą bardziej czytelne i łatwiejsze do zapamiętania.

Jednak rozważałbym inne przypadki użycia tagów. Czy chmura tagów to jedyna rzecz, której chcesz używać do tagowania? Czy istnieją jakieś metadane, które relacja powinna zawierać?

Jeśli planujesz posiadanie milionów wierszy, buforowanie będzie równie ważne jak model danych.

Ponadto, aby uniknąć wyważania otwartych drzwi, sprawdzić, czy ktoś ma wbudowaną bibliotekę, która serwuje swoje cele: http://www.djangopackages.com/grids/g/tagging/

Edit: pisowni

+0

+1 za wskazanie istniejących pakietów django. –

+0

Tak, podoba mi się ten: http://django-taggit.readthedocs.io/en/stable/getting_started.html – Tsangares