2017-09-04 154 views
0

以下是我的模型:Django的模型pre_save驗證在管理

class Product(models.Model): 
    product_title = models.CharField(max_length=100, null=False, 
verbose_name='Product title') 
    product_description = models.TextField(max_length=250, 
verbose_name='Product description') 
    product_qty = models.IntegerField(verbose_name='Quantity') 
    product_mrp = models.FloatField(verbose_name='Maximum retail price') 
    product_offer_price = models.FloatField(verbose_name='Selling price') 

def validate_produce_offer_price(sender, instance, **kwargs): 
    if instance.product_offer_price > instance.product_mrp: 
     from django.core.exceptions import ValidationError 
     raise ValidationError('Product offer price cannot be greater than 
Product MRP.') 


pre_save.connect(validate_produce_offer_price, sender=Product) 

我想保存模型之前驗證product_offer_price。驗證錯誤正在成功提升,但在調試器創建的例外頁面上。如何顯示在管理本身一樣由管理形式提出的其他錯誤表格上的錯誤?

exception raised during changing the existing data Exception raised while adding new data

+0

做了很多回答的變化,現在你可以嘗試用 –

回答

3

models.py

from django.db import models 

class Product(models.Model): 
    product_title = models.CharField(max_length=100, null=False, 
verbose_name='Product title') 
    product_description = models.TextField(max_length=250, 
verbose_name='Product description') 
    product_qty = models.IntegerField(verbose_name='Quantity') 
    product_mrp = models.FloatField(verbose_name='Maximum retail price') 
    product_offer_price = models.FloatField(verbose_name='Selling price') 

forms.py

from models import Product 
from django import forms 

class ProductForm(forms.ModelForm): 
    class Meta: 
     model = Product 
     exclude = [id, ] 

    def clean(self): 
     product_offer_price = self.cleaned_data.get('product_offer_price') 
     product_mrp = self.cleaned_data.get('product_mrp') 
     if product_offer_price > product_mrp: 
      raise forms.ValidationError("Product offer price cannot be greater than Product MRP.") 
     return self.cleaned_data 

admin.py

from django.contrib import admin 
from forms import ProductForm 
from models import Product 

class ProductAdmin(admin.ModelAdmin): 
    form = ProductForm 
    list_display = ('product_title', 'product_description', 'product_qty', 'product_mrp', 'product_offer_price') 

admin.site.register(Product, ProductAdmin) 
+0

走在ProductForm,類元做我們需要添加「田」? –

+0

@GautamMandewalker更新,也可以使用域/排除 –

+0

** django.core.exceptions.ImproperlyConfigured:沒有任何的「域」屬性或「排除」屬性被禁止創建的ModelForm;形式ProductForm需要更新。**我添加了「fields」,所有作品都完美無缺。謝謝。 –