我对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种类型 我可能拥有的物品。 这两者之间最好的方法是什么?
答案 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,但我不推荐它。单个请求可以锁定多个数据库表。但是,它解决了您所描述的问题。