我有一个应用程序在创建时知道某种类型的实体。因此,我不知道如何正确链接相关模型,但我认为它像
e_type字段是一个简单的CharField,基于它具有的值,我查询Type_a或Type_b。
这就是它现在进入django的方式
class Entity(models.Model):
name = models.CharField(max_lenght=64)
e_type = models.CharField(max_lenght=1)
class Type_a(models.Model):
entity = models.OneToOneField(Entity)
attribute = models.CharField(max_lenght=64)
class Type_b(models.Model):
entity = models.OneToOneField(Entity)
attribute = models.CharField(max_lenght=64)
你会建议什么?
感谢
编辑:响应为什么是多个表 - 每个e_type引用不同的表结构。例如,type_a有四个字段,type_b有十个字段,依此类推。拥有一个json字段很简单,因为它可以存储任何数据,因此不需要有多个表,每个表都有自己的结构。我可以看到一个不同的选择是使用像EAV这样的东西。
答案 0 :(得分:1)
我不确定我是否正确地解释了你的问题,但也许,使用继承,就像这样......
class Entity(models.Model):
name = models.CharField(max_length=64)
# Other parent attributes.
class EntityA(Entity):
# unique attributes.
class EntityB(Entity):
# unique attributes.
答案 1 :(得分:0)
我不确定我理解这个问题,但为什么你想要三个不同的表? 我会推荐这样的东西:
#in models.py
class Entity(models.Model):
TYPE_CHOICES = (('A', 'Type A'),
('B', 'Type B'))
name = models.CharField(max_length=64)
type = models.CharField(max_length=1, Choices=TYPE_CHOICES)
attribute = models.CharField(max_length=64)
这具有以下优点:
Entity.objects.all().filter(type__eq='A')