[解決済み] Django REST フレームワークでフィールド名を変更する方法
2022-08-14 14:15:42
質問
DRF Serializer のモデルフィールド名を、SQL のエイリアスのように変更しようとしています。さまざまな方法を試してみましたが、成功しません。
models.py
class Park(models.Model):
name = models.CharField(max_length=256)
alternate_name = models.CharField(max_length=256, blank=True)
objects = models.GeoManager()
class Meta:
db_table = u'p_park'
def __unicode__(self):
return '%s' % self.name
def alias_alternate_name(self):
return self.alternate_name
シリアライザー.py
class ParkSerializer(serializers.ModelSerializer):
location = serializers.Field(source='alias_alternate_name')
#location = serializers.SerializerMethodField(source='alias_alternate_name')
#alternate_name as location
class Meta:
model = Park
fields = ('id', 'name', 'location')
Django Querysetのエイリアスも追加してみましたが、変更できません。
更新しました。
これは私が直面している例外です。
AttributeError at /ViewName/ 'module' object has no attribute 'Field'.
どうすればいいのでしょうか?
どのように解決するのですか?
この場合
serializers.SerializerMethodField
:
以下はそのモデルです。 Parkで、nameとalternate_nameフィールドを持っています。
class Park(models.Model):
name = models.CharField(max_length=256)
alternate_name = models.CharField(max_length=256, blank=True)
objects = models.GeoManager()
class Meta:
db_table = u'p_park'
def __unicode__(self):
return '%s' % self.name
以下はシリアライザです。 という公園モデル用のシリアライザです。これはalternate_nameの名前をlocationに変更します。
class ParkSerializer(serializers.ModelSerializer):
location = serializers.SerializerMethodField('get_alternate_name')
class Meta:
model = Park
fields = ('other_fields', 'location')
def get_alternate_name(self, obj):
return obj.alternate_name
さらに
serializers.CharField
と共に
source
属性で指定します。
class ParkSerializer(serializers.ModelSerializer):
location = serializers.CharField(source='other_fields')
class Meta:
model = Park
fields = ('other_fields', 'location')
Django の
__
記法による外部キーのトラバースも動作します。
location = serializers.CharField(source='OtherModel__other_fields')
APIで戻り値の型を変更したい場合も同じ原理で、以下のようにします。
serializers.DecimalField(source=...)
などのフィールド型も同様です。
しかし、これは読み取り専用のフィールドに対してのみ機能するでしょう。
関連
-
AttributeError: 'str' オブジェクトには 'decode' という属性がありません。
-
Django でチェックボックスの値を取得する方法
-
Djangoキャッシュの説明
-
[解決済み] Django の管理者パスワードをリセットする方法は?
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] Django で現在ログインしているユーザのユーザ ID を取得する方法は?
-
[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
-
[解決済み] django : select_related と get_object_or_404 を一緒に使用する。
-
[解決済み] Django はフォームが初期化された後にフィールドの値を設定します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django request.data を修正する AttributeError: 属性を設定できない
-
オペレーショナルエラーです。1050 解決
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
-
[解決済み] django-rest-framework の管理者スタイルのブラウズ可能なインターフェイスを無効にする方法は?
-
[解決済み] DjangoのRest Frameworkはcsrfを削除します。
-
[解決済み] egg_infoエラーでpipからインストールできない
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?
-
[解決済み] Django はフォームが初期化された後にフィールドの値を設定します。