2016-04-06 20 views
3

Bir modelin herhangi bir durumunu DDBB yapısıyla ilgilenmeden kaydetmek istiyorum. Bu yüzden her modelin sınıfında def save'u geçersiz kılmaya karar verdim. Tür:Django Yöneticisi'nin kaydetme yöntemini geçersiz kılma

def save(self, force_insert=False, force_update=False, using=None, update_fields=None): 
    if condition: 
     raise Exception("You can´t insert that element") 
    return super(name_class, self).save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields) 

Eh, bu konuda bir istisna rasing değil eklemek için ulaşmak ancak örneğin eğer birincil sınırlamanın olmasının ne olursa olsun DB eklemek istediğiniz bu çeki ...

Nasıl geçecek Anladım?

save çekirdek kodunu geçersiz kılmalıyım, ancak kontrol ettim ve DB'ye yerleştirme koşullarını kontrol ettiğim parçayı bulamadım. Belki, Sorun yalnızca formun doğrulanmasıdır.

Django Yöneticisi'nde belirli bir formu nasıl geçersiz kılabilir. Özellikle, modelin bir sınıfını eklediğim, sildiğim veya düzenlediğinizi.

+0

Modelin kaydetme yönteminin üzerine yazabilirsiniz. İşte örnek: http://stackoverflow.com/questions/4269605/django-override-save-for-model –

+0

Teşekkürler Lam, ama yaptığım şey bu. Mesajımı en baştan kontrol et. Sorun, uzatma değil, onu geçersiz kılmaktır. Modellerimin birincil anahtar kısıtlaması var, ancak gerçek DB çalışmıyor (hatta hiç de mantıklı değil gibi görünüyor ...: P). Demek istediğim, eğer kendi çekimi kendimden geçerse, ben de zorlamak istiyorum (is_valid = True belki ...) Benim iki yaklaşımım şunlardır: kaydetmeyi geçersiz kılmak (genişletmez) veya formlarda atlamaları doğrulamak –

cevap

5

ModelAdmin'in save_model üzerine yazabilirsiniz.

class MyAdminView(admin.ModelAdmin): 
     def save_model(self, request, obj, form, change): 
      super(MyAdminView, self).save_model(request, obj, form, change) 
+0

Yukarıdaki belgelerdeki ilk şey ['save_model'] (https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#modeladmin-methods) "veto amaçlı değil" olduğunu belirten bir uyarı – Sayse

+0

Kontrol etmedim, sanırım aynı olacak . Bununla, yöntemi genişletiyorum. Ebeveyni aradığımda, yapmayı düşündüğü ile aynısını yapacağız. PK kısıtlamasını kontrol edin Yerleştirmeyi reddediyorum. –

+0

Evet. Yaptım. Yeni bir eleman eklemeye çalıştığımda birincil anahtar kısıtlaması uyarısı görüntülenir. Bir objedeki istek alanlarını kurtarmak ve objeyi kaydetmek için save_model'i geçersiz kıldım. Piyano tuşu kısıtlaması diğer kısımda kontrol edilir. Tasarruf ettiğimde (save(), save_model(), ...) veya doğrulama aşamasında (clean(), validate(), ...) bilmiyorum. Herhangi bir ipucu? –

1
Sen hiç tasarruf yönteminde doğrulama her türlü yapıyor olmamalıdır

, modeller validating objects

bkz böylece yapmak isteyen herhangi bir doğrulama daha fazla bilgi için bunun yerine

yapılmalıdır bir clean yöntemine sahip

+0

Teşekkürler Sayse. Modellerde temizliği geçersiz kıldım, sadece kendi kontrolümle istisnayı yükselttim. Başka hiçbir şey. Ama tablomda yeni bir kayıt eklemeye çalıştığımda, birincil anahtar kısıtlaması stull beni uyardı. Bunu kaybettim ...: S Ve Django Yönetici formlarının geçerliliğini zorlamak için bir şey ... (is_valid() = Doğru) ... –

İlgili konular