0

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

注型号: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)

但我的情况需要两个连接(注 - 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 回答