2010-03-22 17 views
6

Verileri bir veritabanı tablosuna kaydetmeden önce kodlamak ve veritabanı tablosundan okuduktan sonra kodunu çözmek istiyorum. Ben django almak ve yöntemleri kaydetmek için geçersiz kılmak istedim. gibidjango Modelinde get yöntemini nasıl geçersiz kılabilirim?

şey:

class UserData(models.Model): 
    userid = models.IntegerFields 
    data = models.charField(max_length=25) 

    def save(self, *args, **kwargs): 
     encode_data(self.data) 
     super(UserData, self).save(*args, **kwargs) 

    def get(self, *args, **kwargs): 
     data = super(UserData, self).get(*args, **kwargs) 
     return decode_data(data) 

django modelleri kaydetme yöntemi var ve bunu geçersiz ve ne istediğinizi yapmak mümkün. Ancak, geçersiz kılabilen bir get yöntemine sahip değiller. Bunu nasıl başarabilirim? Verilerin UserData.objects.all() veya UserData.objects.get() veya UserData.objects.filter() veya başka herhangi bir yöntem kullanılabilir çağrılarak çözülmesini istiyorum

cevap

5

Genellikle, bunu __init__'u geçersiz kılarak yapabilirsiniz. Ancak Django Modelleri üzerindeki __init__, her türlü eğlenceli bir iş yaptığından, bunu geçersiz kılmanız önerilmez. Bunun yerine, post_init sinyali dinlemek ve orada çözme yapın: get, filtre olarak, o siz de özel bir Sorgu Kümesi oluşturmak için ihtiyaç sonuçta ediyorum bu şekilde yapmak

def my_decoder(instance, **kwargs): 
    instance.decoded_stuff = decode_this(instance.encoded.stuff) 

models.signals.post_init.connect(my_decoder, UserData) 
+0

Güzel ve basit, yum –

+0

Bu çok yardımcı oldu, teşekkürler. Django, dokümantasyon belgelerini: https://docs.djangoproject.com/en/dev/ref/signals/ –

6

Özel yönetici yazma hakkında dokümanlar okumaya çalışın . Unutmayın, Model numaralı telefondan arama yapmıyorsunuz, ancak bir çeşit yönetici olan Model.objects numaralı telefondan. İşte bunlar: https://docs.djangoproject.com/en/dev/topics/db/managers/

+1

ve Yöneticisi tüm yöntemler sadece geçişine Yöneticinin get_query_set yöntemi tarafından döndürülen QuerySet'deki ilgili yöntemler. –

+2

Bu sayfa mevcut değil. – Alagu

+0

Görünüşe göre taşındı. https://docs.djangoproject.com/en/1.3/topics/db/managers/ – gruszczy

İlgili konular