小编Ale*_*lex的帖子

如何从django模板访问多对多"直通"表的属性?

从Django文档......

当您只处理简单的多对多关系时,例如混合和匹配比萨饼和浇头,您只需要一个标准的ManyToManyField即可.但是,有时您可能需要将数据与两个模型之间的关系相关联.

例如,考虑应用程序跟踪音乐家所属的音乐组的情况.一个人与他们所属的组之间存在多对多关系,因此您可以使用ManyToManyField来表示此关系.但是,您可能希望收集的成员资格有很多详细信息,例如此人加入该组的日期.

对于这些情况,Django允许您指定将用于管理多对多关系的模型.然后,您可以在中间模型上添加额外的字段.中间模型与ManyToManyField相关联,使用through参数指向将充当中介的模型.对于我们的音乐家示例,代码看起来像这样:

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __unicode__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __unicode__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

现在您已经设置了ManyToManyField以使用您的中间模型(在这种情况下为Membership),您已准备好开始创建一些多对多关系.您可以通过创建中间模型的实例来完成此操作:

ringo = Person.objects.create(name="Ringo Starr")
paul = Person.objects.create(name="Paul McCartney")
beatles = Group.objects.create(name="The Beatles")

m1 = Membership(person=ringo, group=beatles,
...     date_joined=date(1962, 8, 16),
...     invite_reason= "Needed a new drummer.")

m1.save()

beatles.members.all()
[<Person: Ringo Starr>]

ringo.group_set.all()
[<Group: The Beatles>]

m2 = Membership.objects.create(person=paul, group=beatles, …
Run Code Online (Sandbox Code Playgroud)

python django many-to-many django-templates relationship

45
推荐指数
2
解决办法
3万
查看次数

node.js配置文件语法错误行433

我通过一个非欢乐的链接下载了node.js,它给了我一个旧版本的节点.所以我想用新的git://github.com/joyent/node.git重新安装node.js. 所以我尝试运行相同的克隆脚本,它给出了一个致命的错误,因为我的节点文件夹不是空的.所以我删除了节点文件夹并再次运行它并克隆它.

之后我尝试运行配置文件,我收到一个错误:

File "./configure", line 433
    fpu = 'vfpv3' if armv7 else 'vfpv2'
                   ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决问题?我已经尝试删除节点文件夹并再次克隆git,但同样的错误.

这是我在第433行附近的文件中找到的代码:

armv7 = is_arch_armv7()
# CHECKME VFPv3 implies ARMv7+ but is the reverse true as well?
fpu = 'vfpv3' if armv7 else 'vfpv2'
Run Code Online (Sandbox Code Playgroud)

node.js

16
推荐指数
1
解决办法
1万
查看次数