2017-04-10 14 views
0

現在、私はdjango 1.10でアプリケーションを開発しようとしています。私は作成時に1対多の関係でオブジェクトの属性をどのように初期化できるかを知りたいと思います。djangoのオブジェクトの編集不可能な属性を作成します。

「Set」(1つ)と「Element」(many)という2つの関連オブジェクトを呼び出しましょう。

オブジェクト 'Set'の属性 'name'は、すでに作成された同じ種類の他のオブジェクトの日付と数によって異なります。この場合、私は興味のある値に値を初期化することに問題はなかった。

しかし、 'Element'オブジェクトの属性 'name'は作成された他の要素の数に依存するが、 'name'それがリンクされている 'Set'のどのようにしてこの情報を入手できますか?

私は変数としてForeignKey値を使用してメソッドを作成しようとしましたが、代わりにエラーを取得していました。私は(ForeignKeyのは、何のPK属性を持っていない)、これは間違っているかを確認することができますが、私は私の問題に他の解決策を見つけることができませんでした

// in models.py 
def get_element_name(set_id): 
    set = Set.objects.get(pk=set_id) 
    set_name = set.name 

    return set_name +'other stuff' 

class Set(models.Model): 
    // set attributes 

class Element(models.Model): 
    set = models.ForeignKey(Set, on_delete=models.CASCADE) 
    name = models.CharField(max_length=250, editable=False, default=get_element_name(set.pk)) 

:私のようなものを試してみました。


(私は実際に入手したいもの:セットの名前は、創造の年に対応する文字と、新しいオブジェクトが作成されるたびに増加している数で行われるA001。最初のセットは2017年に作成され、A002は2番目に、B001は2018年などの最初のセットです。要素のコードは、セットの名前とその中に作成された他の要素の数に応じた1文字ですたとえば、A001AはセットA001の最初の要素、A001Bは2番目の等...)

+0

あなたの質問は私には少し不明です。あなたは要素の名前を何にしたいのかをもっと説明できますか?たぶん、一例ですか? – Dunno

+0

あなたはエラーを出すことができますか? –

+0

エラーが発生しました:AttributeError: 'ForeignKey'オブジェクトに 'pk'属性がありません – user2504163

答えて

0

あなたの場合、フィールド定義にデフォルトを直接設定することはできません。代わりに、あなたはElementモデルのsave方法で、このデフォルトを設定することができます。

def save(self, *args, **kwargs): 
    self.name = self.set.name + 'other stuff' 
    # or self.name = get_element_name(self.set.id) if you prefer, but it does an unusefull call to db 
    return super(Element, self).save(*args, **kwargs) 
関連する問題