Django:多对一的关系

时间:2011-09-11 16:58:16

标签: django django-models

以下是我想要设置几个模型的代码:

from django.db import models

class A(models.Model):
    x = models.CharField(max_length = 2)

class B(models.Model):
    a = models.ForeignKey(A)
    y = models.CharField(max_length = 2, default = a.x)

然而,当我运行python manage.py syncdb时,它告诉我,ForeignKey对象a没有属性x。我搜索了Django文档,到目前为止一直无法找到我的答案。希望代码的含义是清楚的。我如何实际实现这个目标?

提前致谢!

2 个答案:

答案 0 :(得分:3)

您不能将变量放在字段的默认属性中 - 它必须是常量或可调用的。

如果你真的需要这样做,我猜一种方法是在__init__中这样做:

class B(models.Model):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
        if self.a and not self.b:
            self.b == self.a.x

但我必须说我不明白你为什么要这样做,因为你只是复制一个已经可以通过a.x直接访问的值。

答案 1 :(得分:0)

要定义多对一关系,您必须使用django.db.models.ForeignKey.

a= models.ForeignKey(A)