2013-12-10 19 views
5

Ürüne işaret eden iki yabancı anahtar alanlı bir django modelim var. altında. Exatcly Bunlardan biri her Lca kayıt için ayarlanmalıdır. Ben MySQL tetikler ile bunu yapabileceğimi biliyorum ama sen modelin save yöntemini override olabilir djangoİki yabancı anahtar alanı, tam olarak bir değere ayarlandı, MySQL veritabanı ile django modelinde diğer null

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 

cevap

7

kaydetmek bu koşullu yapmak için bir yol olup olmadığını merak ediyorum:

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) 

Not o Bu yöntem bulk_create için geçerli değildir. bir formdan veri istenirse

+0

teşekkürler. Bu çalışıyor – MagicLAMP

0

ben eklemek istediğiniz herhangi bir özel doğrulama için bir model clean() yöntemi ekleyerek öneriyoruz. Model temiz yöntemleri, ModelForms tarafından otomatik olarak çağrılır, ancak save() ile değil, bu nedenle modelinize full_clean() yöntemini çağırmanız ve kullanım durumunuza bağlı olarak ortaya çıkarsa ValidationErrors komutunu kullanmanız gerekebilir.

Model.clean() ilgili daha fazla bilgi için Django documentation bakınız.

İlgili konular