一个表中的多个外键

时间:2013-10-21 18:05:36

标签: python sql django

我有一个table1,其中包含col_a,col_b,col_c,col_c。我有另一个table2,tb_col1,tb_col2,tb_col3,我想引用col_a - > tb_col,col_b - > tb_col2,col_c - > tb_col3。

我应该使用复合键,如果是这样,我如何在Django(python)

中实现它

我的模特:

class product_models(models.Model):
     products = models.ForeignKey('products')
     model_name = models.CharField(max_length=50)
     model_price = models.IntegerField(max_length=4)
     model_desc = models.TextField(blank=True)
     commision = models.IntegerField(max_length=3)

    def __unicode__(self):
        return self.model_name



class sales_process(models.Model):

     prospect = models.ForeignKey('prospect')
     employee = models.ForeignKey(User)
     first_call = models.DateTimeField
     product = models.ForeignKey('products')
     model_name = models.ForeignKey('product_models')
     #price = reference to product_model for the price
     #commission = reference to product_model for commission 

我如何将price引用至product_modelscommissionproduct_models

1 个答案:

答案 0 :(得分:0)

为什么不将product_process与product_models相关联:

product_model = models.ForeignKey('product_models')

不需要在sales_process模型上复制product_models中的多个列吗?

另外,请看一下自定义模型管理器: https://docs.djangoproject.com/en/dev/topics/db/managers/

您可以在模型上创建便捷方法(以便从相关模型中查找内容)。

在下面的示例中,您可以调用Team.objects.get(pk = 1).games()返回团队的所有游戏,无论是回家还是离开。

class TeamManager(models.Manager):
    def games(self, name):
        return Game.objects.filter(home__name=name) | Game.objects.filter(away__name=name)


class Team(models.Model):
    objects = TeamManager()
    name = models.CharField(max_length=100, unique=True)

class Game(models.Model):
    away = models.ForeignKey(Team, null=True, blank=True, related_name="away")
    home = models.ForeignKey(Team, null=True, blank=True, related_name="home")