0

Django: 1対多くらいで接続したいのですが...

ここに画像の説明を入力

私は何をすべきか?

from django.db import models

class Note(models.Model)
    content = models.CharField(max_length=20)

class A(models.Model)
    name = models.CharField(max_length=20)
    addr = models.CharField(max_length=20)
    notes = models.ManyToManyField(Note) # ...? I don't know...

class B(models.Model)
    nickname = models.CharField(max_length=20)
    mobile = models.CharField(max_length=20)
    notes = models.ManyToManyField(Note) # ...? I don't know...

注モデル : A モデル = 1 : N... 注モデル : B モデル = 1 : N...

Note-Aと同時に接続したい Note-B...

私に答えてください!

ありがとうございました!

編集 130208 8:36 KST----

多分ForegienKeyが利用可能です...

しかし、私の場合はそれを使用できません。

接続のみが必要な場合(例:Aへのメモ)、次のコードのように実行できるためです。

from django.db import models

class Note(models.Model)
    content = models.CharField(max_length=20)
    conn = models.ForeignKey(A)

class A(models.Model)
    name = models.CharField(max_length=20)
    addr = models.CharField(max_length=20)

しかし、私の場合は2つの接続(注 - A、注 - B)が必要です。

だから……どうしたらいいのかわからない……

4

2 に答える 2

0

models.ForeignKeyを使用します。

A と B のインスタンスごとに複数のメモが必要な場合は、次のように試すことができます。

from django.db import models

    class Note(models.Model):
        content = models.CharField(max_length=20)
        related_to = models.ForeignKey(A_or_B)

    class A_or_B(models.Model):
        pass

    class A(A_or_B):
        name = models.CharField(max_length=20)
        addr = models.CharField(max_length=20)

    class B(A_or_B):
        nickname = models.CharField(max_length=20)
        mobile = models.CharField(max_length=20)

特定の A または B インスタンスに属するメモを検索するには、次のようにします。

a = A(name="some_name", addr="somewhere")
a.save()
a_note = Note(content="blablabla", related_to=a.id)
a_note.save()
notes_related_to_a = Note.objects.filter(related_to=a.id)
links_from_notes_to_a = {note_x.related_to.a for note_x in notes_related_to_a}
if len(links_from_notes_to_a) and links_from_notes_to_a[0] == a:
    print "It works!"

抽象親クラスの related_to属性は、名前がインスタンスの実際のクラスの大文字化されていない名前 (この例では a または b) である属性を持ちます。この属性には、適切な属性にアクセスできる、Aまたはそこからのインスタンスが含まれます。B

詳細については、ドキュメントのこの部分を確認してください。

于 2013-02-07T15:06:38.953 に答える
0

外部キーを使用

from django.db import models

class Note(models.Model)
    content = models.CharField(max_length=20)

class A(models.Model)
    name = models.CharField(max_length=20)
    addr = models.CharField(max_length=20)
    notes = models.ForeignKey(Note) # ...? I don't know...

class B(models.Model)
    nickname = models.CharField(max_length=20)
    mobile = models.CharField(max_length=20)
    notes = models.ForeignKey(Note) # ...? I don't know...
于 2013-02-07T15:48:09.243 に答える