1

我对 Django 中的约定很好奇。我可能在这里完全偏离了轨道,但在我看来,ForeignKey 通常可以取代在 Django 中定义自己的自定义字段的需要。

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

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 种类型的对象。这两者之间的最佳方式是什么?

4

1 回答 1

1

是的,您可以实现 aForeignKey作为您自己的CustomField. 它不会在 Django 中models(也就是说,你不能使用models.CustomField())。你会使用你自己的类名,它会继承 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 提供了一个内容类型框架,但我不推荐它。单个请求可以锁定多个数据库表。但是,它解决了您描述的问题。

于 2013-07-12T23:54:38.120 回答