2017-01-12 20 views
1

DjangoでManyToManyリレーションシップを定義しようとしていますが、関連オブジェクトを作成しようとするとエラーが発生します。Django:ManyToMany関連エラー(オブジェクトに属性がありません)

マイmodels.py:

class PerfumeBrand(models.Model): 
    class Meta: 
     verbose_name = "Marque de parfum" 
     verbose_name_plural = "Marques de parfum" 

    name = models.CharField(max_length=32) 

    def __str__(self): 
     return self.person.first_name + ' ' + self.person.last_name.upper() + ': ' + self.name 


class Person(models.Model): 
    class Meta: 
     verbose_name = "Personne" 
     verbose_name_plural = "Personnes" 

    first_name = models.CharField(max_length=32,) 
    last_name = models.CharField(max_length=32) 
    email = models.EmailField(unique=True) 
    # Here is the ManyToMany relation 
    perfume_brands = models.ManyToManyField(PerfumeBrand) 

問題は、私は私のデータベースにPerfumeBrandオブジェクトを保存しようとすると、私はこのエラーを取得することです:

はAttributeError管理者/視覚化/で/ perfumebrand /追加/

'PerfumeBrand' オブジェクトには属性「人

を持っていません

コードと管理パネルの両方で保存しようとしましたが、同じエラーが発生します。

DjangoプロジェクトでManyToManyリレーションが必要なのは初めてのことなので、ちょっと混乱していて、私の問題を解決できませんでした。

ご存知ですか?

+0

確かに、PerfumeBrandは属性 'person'を持っていません。なぜ '__unicode__'メソッドで' self.person'を使用していますか? –

答えて

1

クラスPerfumeBrandは、変数personを決して定義せず、nameのみを定義します。 PerfumeBrandオブジェクト上

2

、あなたはこの

def __str__(self): 
    return self.person.first_name + ' ' + self.person.last_name.upper() + ': ' + self.name 

しかしpersonPerfumeBrandの属性ではありません宣言しています。この関数は、(前にいくつかの変更を伴う)Personクラスの下にあるべきであり、そしてあなたがPerfumeBrandクラスで、次のようなものを使用する必要があります

def __str__(self): 
    return self.name 
+1

どのように神、私は私の関係をひっくり返して、strで起因する名前を削除することを完全に忘れる。 ありがとうございました! – Korbraan

関連する問題