问题
Following is my model:
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)
I am trying to validate the product_offer_price before the model is saved. The Validation error is being raised successfully, but the on an exception page created by the debugger. How to show the error on the form in the admin itself like other errors raised by the admin form?
回答1:
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)
来源:https://stackoverflow.com/questions/46038262/django-model-pre-save-validation-in-admin