2
は私のモデルですDjangoのadminに新しいインラインを追加することができますは編集できませんが、ここで
class Note():
note = models.TextField(null=False, blank=False, editable=True)
user = models.ForeignKey(to=User, null=True, blank=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id")
そして、私は任意の管理者に組み込むには、このモデルを作成し、インラインは、私は必要なもの
class NoteInline(GenericTabularInline):
model = Note
extra = 0
を下回っていますここでは、現在のすべてのノートを表示したいが、ログインしたユーザーがそれらのノートを編集しないようにしたい。現時点では、ユーザーは古いものを編集して新しいものを追加することができます。だから私がしたことはここにあります。
class NoteInline(GenericTabularInline):
model = Note
extra = 0
def get_readonly_fields(self, request, obj=None):
if obj and 'change' in request.resolver_match.url_name:
return ['note', 'user', ]
else:
return []
しかし、ユーザーが新しいメモを追加すると、無効な(編集不可の)メモテキストが表示されます。しかし、ユーザーは編集可能ではない古いフィールドを見ることができます。
この機能を実装するにはどうすればよいですか?
この目的のために
は、私はそれが最初のデータを有しているインスタンスが変更された場合、検証エラーを発生させforms.pyで
NoteForm
を作成しましたこのようなものが動作します。「追加」ビューと「変更」ビューに異なるインラインが追加されていますか? https://djangosnippets.org/snippets/3084/ – tdsymondsこれでは、インラインを部分的に読み取り専用にしたり、部分的に編集したりすることはできません(ノートのインライン追加)。ここに私がしたことが2つの新しいインラインに分かれています。ここでうまく説明されているhttps://stackoverflow.com/a/28149575/1439913 –