次のリンクは、必要なIDを渡しますid = serializers.UUIDField()
を使用することにより、だから、私をたくさんDjangoの残りのフレームワークポスト主キーUUIDまたは自動生成
を助けました。 オンが見つからない場合、自動的に自動生成されなくなります。
シリアライザでIDをPOSTできるようにするには、Createメソッドをオーバーライドする必要があり、投稿データにIDが渡されない場合は、新しいuuidを生成して保存します。 これが正しいですか? OR DRFが許可する方法と、IDを渡す方法と、そうでない場合に自動生成する方法はありますか?
編集:私はCreateメソッドをオーバーライドし、それが存在しない場合は、新しいUUIDを生成しようとしたが、DRFが最初のデータをチェックし、まだ
{
"id": [
"This field is required."
]
}
を返しているかのように表示されます
Psこれは全く関連性があるが、主キーのUUIDを使用し、私たちのモデルは、以下の
モデル
class Company(models.Model):
id = PGUUIDField(primary_key=True)
と定義を使用している場合、私は知りません
class PGUUIDField(CharField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('editable', not kwargs.get('primary_key', False))
kwargs.setdefault('default', uuid.uuid4)
kwargs.setdefault('max_length', 36)
super(PGUUIDField, self).__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super(PGUUIDField, self).deconstruct()
# Only include kwarg if it's not the default
return name, path, args, kwargs
def db_type(self, connection=None):
return 'uuid'
def get_db_prep_value(self, value, *args, **kwargs):
return self.to_python(value)
def to_python(self, value):
if not value:
return None
if not isinstance(value, uuid.UUID):
value = uuid.UUID("%s"%value)
return value