それは(おそらく)正確な答えではありませんが、役立つと思います。
Django Admin ではsave
、ModelAdmin.save_model メソッドでメソッドをオーバーライドできます (ドキュメントはこちら) 。
また、Django api にはget_or_create
メソッドがあります ( Doc is here )。2 つの値を返します。1 つ目はオブジェクトで、2 つ目はオブジェクトが作成されたかどうか (既存のレコードを更新したかどうか) を表すブール値です。
FirstObject
私はあなたが持っていると言ってみましょうSecondObject
関連admin.py
ファイルで:
class FirstObjectAdmin(admin.ModelAdmin):
...
...
def save_model(self, request, obj, form, change):
s_obj, s_created = SecondObject.objects.get_or_create(..., defaults={...})
if not s_created:
# second object already exists... We will raise validation error for our first object
...
残りについては、それを処理する方法について明確な考えがありません。フォーム オブジェクトが手元にあるので、 admin のカスタム検証をform.fields{'somefield'].validate(value)
呼び出して書き込むことができます。メソッドをオーバーライドして、 fromメソッドをトリガーしようとする可能性があります。そこから値を呼び出して渡すことができます...clean
raise ValidationError
ModelAdmin.save_model
validate
django のソースを掘り下げて、django がこれをどのように処理するかを確認し、いくつかのカスタム検証ステップを定義してみてください。