2013-02-07 45 views
0

Django的連接:我想約一個一對多的連接...Django的:我想約一個一對多

enter image description here

我該怎麼辦?

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 ...

我想連接注 - 在同一時間注 - 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) 

但我的情況需要兩個連接(注 - A,注 - B)。

所以....我不知道我該怎麼辦......

+0

我認爲,如果你想要的模型A和B有幾個注意事項您的圖形違揹你的解釋...... N個和應該交換這些鏈接1。 –

+0

對不起,你是對的... – chobo

+0

我找到https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericForeignKey .... 但是我仍然不知道... – chobo

回答

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 intance的音符會是這樣:

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)。此屬性包含您可以訪問正確屬性的實例AB

檢查this part的文檔的更多信息。

+0

如何添加新的Note對象? – chobo

+0

@chobo剛剛添加了如何添加它 –

0

使用ForeignKey

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... 
+0

我現在添加了內容!謝謝! – chobo

+0

對不起,我的照片是錯的......所以我剛纔改變了。 – chobo