自定义Django ForeignKey字段到已定义的模型类

时间:2017-11-23 00:19:57

标签: python django django-models

使用Django 1.11我想创建一个继承自ForeignKey的自定义模型字段。

使用普通的ForeignKey,您可以执行以下操作:

class Car(models.Model):
    manufacturer = models.ForeignKey(Company)

相反,我想创建一个与ForeignKey字段大致相同的模型字段,但是1)对表单字段使用不同的默认窗口小部件,2)不要求将模型名称放置为位置参数。

# myapp/models.py
from otherapp.fields import ManufacturerField

class Car(models.Model):
    manufacturer = ManufacturerField()

不幸的是,我很难重写子类的 init 方法,以便将我的“公司”模型插入到混合中。这是我到目前为止通过一个modelfield的方式(还没有在widget上工作):

# otherapp/fields.py
from otherapp.models import Company

class ManufacturerField(models.ForeignKey):

def __init__(self, *args, **kwargs):
    return super(ContentField, self).__init__(Company, **kwargs)

当我尝试这样做时,我得到:

TypeError: Couldn't reconstruct field manufacturer on myapp.Car: __init__() got multiple values for argument 'to'

我是否可以在自定义modelfield类上设置一个属性来指定我希望这是一个特定模型的外键?如果没有,关于我如何正确拦截 init 方法以提供给我的模型的任何想法?

1 个答案:

答案 0 :(得分:0)

super()明确引用基类。你可以看到这个question来理解它。

def __init__(self, *args, **kwargs):
    return super(ContentField, self).__init__(Company, **kwargs)

应该是;

def __init__(self, *args, **kwargs):
    return super(ManufacturerField, self).__init__(*args, **kwargs)

以下是example如何自定义字段。