2011-12-05 77 views
0

你在models.py定義3種型號引用特定對象...在模型ForeignKey的

from django.db import models 

class Foo(models.Model): 
    alpha = models.CharField(max_length=10) 

class Bar(models.Model): 
    foo = models.ForeignKey(Foo) 
    bravo = models.DateTimeField() 

class Baz(models.Model): 
    foo = models.ForeignKey(Foo) 
    bar = models.ForeignKey(Bar) 
    charlie = models.BooleanField() 


......你想確保bar對象Baz引用同一FoofooBaz的引用。

這可能嗎?還是有更好的方法來設計這些模型?

回答

2

很難說出你真正想要的東西。在最基本的層面上,你可以運行模型的clean方法

class Baz(models.Model): 
    ... 
    def clean(self): 
     if self.foo != self.bar.foo: 
      raise ValidationError('Some error here') 

但是一檢查,如果Baz.foo,必須始終同Baz.bar.foo,那麼它是沒有意義的有foo作爲Baz屬性。如果需要foo,只需通過bar屬性即可。

或者,如果你堅持數據冗餘,至少把人變量的方程,並簡單地設置Baz.foo自動:

class Baz(models.Model): 
    ... 
    def save(self, *args, **kwargs): 
     self.foo = self.bar.foo 
     super(Baz, self).save(*args, **kwargs)