2016-12-21 5 views
0

DjangoでOneToOneFieldとManyToManyFieldで関連するフィールドを取得するにはどうすればよいですか?与えられた例DjangoでOneToOneFieldとManyToManyFieldで関連するフィールドを取得するにはどうすればよいですか?

class A(models.Model): 
    myfield = models.CharField() 
    as = models.ManyToManyField('self') 
class B(models.Model): 
    a = models.OneToOneField(A) 

私はクラスBを使用した「として」関連する「myFieldで」とすべてを取得したい場合は、「のMyField」「例」のような文字列に等しい、どのようにそれがあります完了?

答えて

0

Models.py

class Place(models.Model): 
    name = models.CharField(max_length=50) 
    address = models.CharField(max_length=80) 

    def __str__(self):    # __unicode__ on Python 2 
     return "%s the place" % self.name 

class Restaurant(models.Model): 
    place = models.OneToOneField(
     Place, 
     on_delete=models.CASCADE, 
     primary_key=True, 
    ) 
    serves_hot_dogs = models.BooleanField(default=False) 
    serves_pizza = models.BooleanField(default=False) 

    def __str__(self):    # __unicode__ on Python 2 
     return "%s the restaurant" % self.place.name 

は場所のインスタンスを作成してみましょう。

p1 = Place.objects.create(name='Demon Dogs', address='944 W. Fullerton') 

次に、レストランオブジェクトを作成します。

r = Restaurant.objects.create(place=p1, serves_hot_dogs=True, serves_pizza=False) 

さて、レストランからの場所にアクセスするには:私は理解していなかった場所

>>> p1.restaurant 
<Restaurant: Demon Dogs the restaurant> 

からレストランにアクセスするための

>>> r.place 
<Place: Demon Dogs the place> 

その逆に多対多のフィールドの一部ことができますあなたは詳細を教えてください?次のように

0

まずあなたがBのインスタンスを取得するにはbを言うと、あなたはb

b.a.myfield 
b.a.as.all() 

a属性を通じてmyfieldasに簡単にアクセスすることができますさらに、CharFieldはMAX_LENGTH属性が必要です。

class A(models.Model): 
    myfield = models.CharField(max_length=128) 
    as = models.ManyToManyField('self') 
class B(models.Model): 
    a = models.OneToOneField(A) 

一般的な点として、モデルとその属性にわかりやすい名前を付けるか、少なくともこれらのmodを説明するコメントを追加するelsは

を表します。
関連する問題