<p>好了,每个人都在尝试同样的方法,向django模型添加额外的kwarg,将它们传递给rest_framework序列化程序,并将它们传递到元数据方案中,以便在API请求的OPTIONS方法中获取它们:</p>
<p>在这个例子中,我向CharField添加了一个kwarg'serial'。第一次延伸django.db.型号.CharField并在模型中使用它:</p>
<p><em>模型.py</em></p>
<pre><code>class RsCharField(models.CharField, metaclass=models.SubfieldBase):
def __init__(self, serial=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.serial = serial
class MyModel(models.Model):
fied_name1 = RsCharField(max_length=100, serial=123456, default="")
</code></pre>
<p>然后为您的新字段类型创建一个新的序列化程序,例如下面的RsCharField,并扩展ModelSerializer以创建从Django模型RsCharField到序列化器RsCharField的映射。在</p>
<p>扩展ModelSerializer的build_standard_field方法,以将django模型RsCharField中的额外kwarg添加到序列化程序RsCharField中</p>
<p><em>序列化程序.py</em></p>
^{pr2}$
<p>最后,扩展SimpleMetadata,将新的kwargs传递给api的OPTIONS方法,并在方案中显示:</p>
<pre><code>class RsMetaData(SimpleMetadata):
def get_field_info(self, field):
field_info = super(RsMetaData, self).get_field_info(field)
if(isinstance(field, RsCharField)):
field_info['serial'] = field.serial
return field_info
</code></pre>
<p>然后调整设置.py在</p>
<pre><code>REST_FRAMEWORK = {
'DEFAULT_METADATA_CLASS': 'my.customize.RsMetaData'
}
</code></pre>
<p>可能还不整洁,但这是个主意。太棒了!在</p>