में निर्भर इनलाइनों का सत्यापन मैं Django 1.4 का उपयोग कर रहा हूं और मैं सत्यापन नियम सेट करना चाहता हूं जो अलग-अलग इनलाइनों के मानों की तुलना करें।django व्यवस्थापक
मैं तीन सरल कक्षाओं
models.py में है:
class Shopping(models.Model):
shop_name = models.CharField(max_length=200)
class Item(models.Model):
item_name = models.CharField(max_length=200)
cost = models.IntegerField()
item_shop = models.ForeignKey(Shopping)
class Buyer(models.Model):
buyer_name = models.CharField(max_length=200)
amount = models.IntegerField()
buyer_shop = models.ForeignKey(Shopping)
admin.py में:
class ItemInline(admin.TabularInline):
model = Item
class BuyerInline(admin.TabularInline):
model = Buyer
class ShoppingAdmin(admin.ModelAdmin):
inlines = (ItemInline, BuyerInline)
इसलिए उदाहरण के लिए यह संभव है पर Rhum की एक बोतल खरीदने के लिए 8 $ और वोदका में से एक $ 8 पर। माइक 15 डॉलर का भुगतान करता है और टॉम 3 डॉलर का भुगतान करता है।
लक्ष्य उपयोगकर्ता को उन रकम के साथ एक उदाहरण सहेजने से रोकने के लिए है जो मेल नहीं खाते हैं: भुगतान किया गया है आइटम की लागत (यानी 10 + 8 = 15 + 3) के योग के समान होना चाहिए।
मैंने कोशिश की:
- Shopping.clean विधि में ValidationError उठा। लेकिन इनलाइनों को अभी तक साफ नहीं किया गया है, इसलिए रकम सही नहीं हैं
- शॉपिंगएडमिन.save_related विधि में प्रमाणीकरण त्रुटि को बढ़ाएं। लेकिन यहां सत्यापन प्रमाणीकरण एक अच्छा त्रुटि संदेश के साथ परिवर्तन पृष्ठ पर पुनर्निर्देशित करने के बजाय एक बहुत ही उपयोगकर्ता असभ्य त्रुटि पृष्ठ देता है।
क्या इस समस्या का कोई समाधान है? क्लाइंट-साइड (जावास्क्रिप्ट/AJAX) प्रमाणीकरण सबसे सरल है?
हैलो, क्या आप इसके लिए कुछ लेकर आए हैं? मुझे एक ही समस्या का सामना करना पड़ता है। एकमात्र समाधान जो मैं सोच सकता हूं वह इनलाइन मॉडल की क्लीन विधि है, लेकिन यह एक बड़ा डीबी ओवरहेड उत्पन्न करेगा। – ppetrid
मुझे लगता है कि एक समाधान django व्यवस्थापक के व्यवहार को संपादित करना है। Django/contrib/admin/options.py, add_view विधि पंक्ति 924 – Rems