Django中的外键与自定义字段

时间:2013-07-12 20:37:31

标签: database django django-models

我对Django的约会感到好奇。我可能完全偏离这里,但在我看来,ForeignKey经常可以取代在Django中定义自己的自定义Field的需要。

例如,这就是我现在的代码,

class MyObject(models.Model):
    object_type = models.ForeignKey(Object_Type)


class Object_Type(models.Model):
    value = models.CharField(max_length=20)

这不能被这样的东西取代吗?

class MyObject(models.Model):
    object_type = models.CustomField()

自定义字段是我定义的字段,涵盖了所有类型,例如10种类型 我可能拥有的物品。 这两者之间最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

是的,您可以将ForeignKey实现为您自己的CustomField。它不会出现在Django models中(也就是说,你不能使用models.CustomField())。您将使用自己的类名,而subclass models.Field

目前尚不清楚如何处理混合类型(如int,float等)。您需要将它们转换为共享表示形式,如字符串。

另一种选择是声明对象类并查询适当的模型。例如,如果你有:

class MyModel(models.Model):
    object_class = models.CharField(max_length=10)

class Object20(models.Model):
    mymodel = models.ForeignKey(MyModel)
    value = models.CharField(max_length=20)

然后你可以写:

m = MyModel.objects.get(pk=1)
if m.object_class == 'Object20':
    o = Object20.objects.filter(mymodel=m).get()
    value = o.value

Django提供contenttypes framework,但我不推荐它。单个请求可以锁定多个数据库表。但是,它解决了您所描述的问题。