Django:我想连接一对多关系
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...
Note模型:一个模型可以对应多个...
Note模型:B模型也可以对应多个...
我想同时连接Note - A和Note - B...
请帮我解答一下!
谢谢!
编辑 130208 8:36 KST----
也许可以用ForeignKey来实现...
但在我的情况下不能这样用。
因为如果我只想建立一个连接(比如Note到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)
但是我的情况需要两个连接(Note - A,Note - B)。
所以……我不知道该怎么做...
2 个回答
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...
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)。这个属性包含了或的实例,你可以通过它访问相关的属性。
想了解更多信息,可以查看 文档的这一部分。