Django:我想连接一对多......
我该怎么办?
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...
注意型号:型号= 1:N ...... 注意型号:B型号= 1:N ......
我想连接Note-A同时注意 - 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 :(得分:0)
如果您想为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
的实例,您可以从中访问正确的属性。
查看文档的this part以获取更多信息。
答案 1 :(得分: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...