我有两个班级
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
告诉我关于表格C
或D
,商店的价值告诉我该表c
或d
中的行。现在我只是想要在不覆盖值的情况下在浏览器上显示值。这可能吗?
答案 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