Django ForeignKey问题

时间:2010-01-20 11:23:31

标签: django django-models django-admin

我有两个班级

class A(models.Model):
    id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=200)
    store_id=models.IntegerField()
    type=models.ForeignKey(B)

class B(models.Model):
    id=models.IntegerField(primary_key=True)
    type=models.CharField(max_length=10)

 class C(models.Model):
    id=models.IntegerField(primary_key=True)
    store=models.CharField(max_length=200)

 class D(models.Model):
   id=models.IntegerField(primary_key=True)
   type=models.CharField(max_length=10)

在我的班级A type中是B上的ForeignKey,store_id是C或D上的逻辑外键,具体取决于type的值。

在我的字段集中,我想在计算后根据类型显示store的值。 type告诉我关于表格CD,商店的价值告诉我该表cd中的行。现在我只是想要在不覆盖值的情况下在浏览器上显示值。这可能吗?

2 个答案:

答案 0 :(得分:1)

也许你应该看看Generic Relations

答案 1 :(得分:0)

如果我找到你,那么store_id总是指向C对吗?但是这个值取决于type字段?
如果是这样,您可以在这些模型之间设置正常关系,并在保存期间根据store_id字段设置type

class A(models.Model):
    id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=200)
    store=models.ForeignKey(C)
    type=models.ForeignKey(B)

    def save(self,*args, **kwargs):
        if self.type == some_type:
            self.store = get_specific_store_here()
        super(A, self).save(*args, **kwargs)

稍后您可以通过以下方式访问商店名称:

# a is an object of model A
a.store.store

如果您想坚持使用通用整数字段,只需添加自定义方法:

class A(models.Model):
    id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=200)
    store_id=models.IntegerField()
    type=models.ForeignKey(B)

    def get_store_name():
        store = C.objects.get(pk=self.store_id)
        return store.store