2013-12-10 5 views
5

के साथ django मॉडल में अन्य शून्य, मेरे पास दो विदेशी कुंजी फ़ील्ड्स वाला एक django मॉडल है, जो उत्पाद को इंगित करता है, कोड में पोर्टफोलियो के लिए अन्य बिंदु नीचे। इनमें से एक को प्रत्येक एलसीए रिकॉर्ड के लिए सेट किया जाना चाहिए। मैं जानता हूँ कि मैं यह कर सकता MySQL से चलाता है के साथ है, लेकिन यदि इस सशर्त Djangoदो विदेशी कुंजी फ़ील्ड, बिल्कुल एक मूल्य पर सेट किया गया है, MySQL डेटाबेस

class Lca(models.Model): 
    product    = models.ForeignKey(product, null=True, blank=True) 
    portfolio   = models.ForeignKey(portfolio, null=True, blank=True) 
    carbon_price  = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True) 
    name    = models.CharField(max_length=255, blank=True) 
    total_footprint  = models.IntegerField(blank=True, null=True) 
    calculation_type = models.CharField(max_length=9) 
    total_cv   = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True) 
    source    = models.CharField(max_length=255, blank=True) 
    date_from   = models.DateField() 
    date_to    = models.DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.name 
    # end __unicode__ 
# end 

उत्तर

7

में बचाने आप मॉडल की save विधि override कर सकते हैं बनाने के लिए एक तरीका था मैं सोच रहा था:

def save(self, *args, **kwargs): 
    if self.product and self.portfolio or not self.product and not self.portfolio: 
     raise ValueError('Exactly one of [Lca.product, Lca.portfolio] must be set') 

    super(Lca, self).save(*args, **kwargs) 

ध्यान दें कि यह विधि bulk_create पर लागू नहीं है।

+0

धन्यवाद। यह काम कर रहा है – MagicLAMP

0

यदि आप किसी फ़ॉर्म से अपने डेटा का अनुरोध करते हैं तो आप clean forms validations का उपयोग कर सकते हैं।

0

मैं किसी भी कस्टम सत्यापन के लिए एक मॉडल clean() विधि जोड़ने की सलाह दूंगा। ModelForms द्वारा मॉडल क्लीन विधियों को स्वचालित रूप से बुलाया जाता है, लेकिन सहेजने() से नहीं, इसलिए आपको मॉडल full_clean() विधि को स्वयं कॉल करने की आवश्यकता हो सकती है और यदि वे आपके उपयोग के मामले के आधार पर सत्यापन होते हैं तो वैलिडेशन एरर को संभालने की आवश्यकता हो सकती है।

Model.clean() पर अधिक जानकारी के लिए Django documentation देखें।

संबंधित मुद्दे