2011-12-05 3 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() 


を持っている...あなたはBazbarのオブジェクトが同じFooを参照するようにしたいですそのfooBazで参照してください。

これは可能ですか?あるいは、これらのモデルを設計するより良い方法がありますか?

答えて

2

ここで実際に何をしたいのかは分かりません。最も基本的なレベルでは、しかし、Baz.foo場合、常にBaz.bar.fooと同じでなければなりません、それはBazに属性としてfooを持ってしても意味がありませんモデルのclean方法

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

でチェックを実行することができます。 fooが必要な場合は、bar属性で取得してください。

それとも、あなたは、データの冗長性を主張する場合、少なくとも式のうち、人間の変数を取り、単に自動的にBaz.fooを設定します。

class Baz(models.Model): 
    ... 
    def save(self, *args, **kwargs): 
     self.foo = self.bar.foo 
     super(Baz, self).save(*args, **kwargs) 
関連する問題