Django model pre_save Validation in Admin

半城伤御伤魂 提交于 2020-01-06 04:52:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!