У меня есть две модели TextDocument и TranslatedText, как показано ниже. Я загружаю PDF-файл в другую модель (документ), и если в нем есть текст, выполняю распознавание текста и сохраняю текст OCR в поле original_text в TextDocument. Если текст не на английском языке sh, я перевожу его и сохраняю перевод в поле translated_text в TranslatedText. TranslatedText имеет отношение внешнего ключа к TextDocument.
class TextDocument(models.Model):
document_id = models.ForeignKey(Document, on_delete=models.CASCADE,)
original_text_file_name = models.FileField('OCR File name', upload_to=settings.DOCUMENT_FOLDER_OCR, default=settings.DEFAULT_OCR_PATH, storage=OverwriteStorage())
original_text = models.TextField(default=get_default_text, blank=True)
original_language = models.CharField(default=get_default_language, max_length=100)
created = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="date created")
updated = models.DateTimeField(auto_now=True, editable=False, verbose_name="last update")
class TranslatedText(models.Model):
document_id = models.ForeignKey(Document, on_delete=models.CASCADE,)
text_document_id = models.ForeignKey(TextDocument, on_delete=models.CASCADE,)
translated_text_file_name = models.FileField('Translated File name', upload_to=settings.DOCUMENT_FOLDER_TRANSLATION, default=settings.DEFAULT_TRANSLATION_PATH, storage=OverwriteStorage())
translated_text = models.TextField()
translated_language = models.CharField(default=get_default_language, max_length=100)
created = models.DateTimeField(auto_now_add=True, editable=False, verbose_name="date created")
updated = models.DateTimeField(auto_now=True, editable=False, verbose_name="last update")
На странице изменения TransaltedTextAdmin я отображаю поле translated_text в TextBox, чтобы его можно было редактировать при необходимости. Я также хочу отобразить поле TextDocument orignal_text как редактируемое поле, поэтому, если OCR испортилось, администратор может это изменить. Однако мне кажется, что я могу отображать только поле original_text как поле read_only и не могу его редактировать.
class TranslatedTextAdmin(admin.ModelAdmin):
logger.debug("TranslatedTextDocumentAdmin START")
list_display = ('get_document', 'get_document_id', 'get_document_state', 'translated_text_file_name', 'translated_language', 'updated', 'created', 'get_thumb',)
#readonly_fields = ('get_original_document','updated', 'created','translated_language', 'translated_text_file_name', 'original_text',)
readonly_fields = ('get_original_document','updated', 'created','translated_language', 'translated_text_file_name', )
form = TranslatedTextAdminForm
fieldsets = (
(None, {
'fields': ('translated_text', 'original_text', 'get_original_document', 'translated_text_file_name', 'translated_language', 'updated', 'created'),
#'fields': ('translated_text', 'text_document_id__original_text', 'get_original_document', 'translated_text_file_name', 'translated_language', 'updated', 'created'),
'classes': ('extrapretty',),
}),
)
def get_translated_text(self, obj):
return TranslatedText.objects.get_translation_metadata_text(obj.document_id)
class TranslatedTextAdminForm(forms.ModelForm):
original_text = forms.CharField()
def __init__(self, *args, **kwargs):
super(TranslatedTextAdminForm, self).__init__(*args, **kwargs)
self.fields['original_text'] = forms.CharField(widget=AdminTextareaWidget(attrs={'cols': 40, 'rows': 10}), required=False)
self.fields['original_text'].initial = TextDocument.objects.get_text_metadata_text(self.instance.document_id)
class Meta:
model = TranslatedText
fields = '__all__'
Я пробовал использовать TranslatedTextAdminForm, как показано, но я могу получить только поле original_text отображать текстовое поле, которое нельзя редактировать. Что мне не хватает?
Спасибо!
Отметка