2017-05-11 8 views
1

私は作成者フィールドを持つモデルを持っています。このフィールドをモデルインスタンスを作成した人に初期化し、後で変更することはできません。作成者をDjangoRestFrameworkで自動的に設定する

は、作成者フィールドには、次のようになります。

creator = models.ForeignKey(User) 

そしてDRF HyperlinkedModelSerializerで私はこれを持っている:

read_only_fields = ('creator',) 

今問題があるため、もはや新しいインスタンスを作成することはできませんもちろんのIです作成者フィールドが設定されていません。どうすればそれを達成できますか?

一つの可能​​な解決策は、これはそれを行うには、乾燥の方法です。この

def create(self, validated_data): 
    validated_data['creator'] = self.context['request'].user 
    return models.MyModel.objects.create(**validated_data) 

のようですか?

答えて

1

あなたはCreateOnlyDefaultCurrentUserDefaultを組み合わせて、あなたのシリアライザにdefault値でread_onlyとして作成者を定義することができます:あなたはcreatorフィールドがあるシリアライザ定義から直接見るよう

creator = serializers.HyperlinkedRelatedField(
    read_only=True, 
    default=serializers.CreateOnlyDefault(serializers.CurrentUserDefault()), 
    view_name=... 
) 

これは、これを行うための私の好ましい方法であります特別に扱われる。

+0

ありがとう、それは私が必要としたものです。この組み合わせがうまくいくかどうかは分かりませんでした。 – Fabian

+0

ええと、私はそれが実際には覚えていないことに気づいた!はい、作成時に作成者が設定されている、それは素晴らしいです。しかし、別のユーザーがputしてパッチを当てると、作成者は最後のユーザーに更新されます。だから今はもっとlast_modified_byフィールドです。 – Fabian

+0

ええと、私は次の正しい実装があると思います:creator = serializers.HyperlinkedRelatedField(view_name = 'user-detail'、read_only = True、default = serializers.CreateOnlyDefault(serializers.CurrentUserDefault()) – Fabian

関連する問題