Django 自定义模型字段扩展ForeignKey的示例
有人能给我一个扩展ForeignKey模型字段的例子吗?我试着这样做:Django 自定义模型字段扩展ForeignKey的示例,django,django-models,djangoappengine,Django,Django Models,Djangoappengine,有人能给我一个扩展ForeignKey模型字段的例子吗?我试着这样做: class ForeignKeyField(forms.ModelChoiceField): def __init__(self, *args, **kwargs): super(ForeignKeyField, self).__init__(Chain.objects.all(), *args, **kwargs) def clean(self, value): return
class ForeignKeyField(forms.ModelChoiceField):
def __init__(self, *args, **kwargs):
super(ForeignKeyField, self).__init__(Chain.objects.all(), *args, **kwargs)
def clean(self, value):
return Chain.objects.get(pk=value)
class CustomForeignKey(models.ForeignKey):
description = "key from ndb"
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
super(CustomForeignKey, self).__init__(*args, **kwargs)
def db_type(self, connection):
return "ndb"
def to_python(self, value):
# import pdb; pdb.set_trace()
from google.appengine.api.datastore_types import Key
if isinstance(value, Key) is True:
return value.id()
if value is None:
return
return value
def get_db_prep_save(self, value, connection, prepared=False):
save_value = ndb.Key(API_Chain, value.id).to_old_key()
return save_value
def formfield(self, **kwargs):
return models.Field.formfield(self,ForeignKeyField, **kwargs)
我不知道为什么,但是如果我使用\uuuuuuuuuu元类=models.SubfieldBase
调用to\u python时没有值,它说外键不能为null。如果我从models.Field继承,它可以工作,但不能作为外键。
我想看看如何扩展models.ForeignKey的功能。谢谢。您需要子字段基础吗?它在幕后发挥了一些魔力,因此该字段有一个调用python的描述符。ForeignKey有不同类型的描述符。我猜ForeignKey描述符被subfieldbase描述符覆盖了。换句话说,它们不兼容。我可以让它们兼容吗?或者我可以强制它覆盖这个?