2012-11-10 32 views
13

Tôi tự hỏi nếu sau đây là cách chính xác để tạo ra hệ thống gắn thẻ cho hình ảnh và có thể làm cho một đám mây tag:Django model Tag thiết kế

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 

Lưu ý rằng bảng cơ sở dữ liệu của tôi sẽ bao gồm hàng triệu hàng và mỗi hình ảnh sẽ có 4-8 thẻ.

Vui lòng thông báo.

+0

Tôi biết điều này là khá một thời gian trước, nhưng sẽ bạn tâm trí giải thích lý do tại sao bạn đặt một trường slug trong Tag? Ý tôi là, mục đích là gì. Thực sự tò mò. – Nifled

Trả lời

18

Nếu tất cả những gì bạn muốn làm là tạo một đám mây thẻ, thì mô hình dữ liệu đó phải đủ. Tôi sẽ thực hiện một sửa đổi:

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

Điều đó sẽ giúp bạn tra cứu ngược trong chế độ xem ảnh của bạn để đọc và dễ nhớ hơn.

Tuy nhiên, tôi sẽ xem xét các trường hợp sử dụng khác cho thẻ của bạn. Tag cloud có phải là thứ duy nhất bạn muốn sử dụng để gắn thẻ không? Có bất kỳ dữ liệu meta nào mà mối quan hệ nên chứa không?

Nếu bạn dự định có hàng triệu hàng, khi đó bộ nhớ đệm sẽ quan trọng như mô hình dữ liệu.

Ngoài ra, để tránh reinventing the wheel, xem nếu bất cứ ai khác đã xây dựng một thư viện phục vụ mục đích của bạn: http://www.djangopackages.com/grids/g/tagging/

Sửa: Spelling

+0

+1 để trỏ đến các gói django hiện có. –

+0

vâng tôi thích cái này: http://django-taggit.readthedocs.io/en/stable/getting_started.html – Tsangares

Các vấn đề liên quan