尝试将外键字段编辑到另一个模型中的一个模型

时间:2020-06-17 23:42:51

标签: django django-models django-admin

我有两个模型TextDocument和TranslatedText,如下所示。我将pdf上传到另一个模型(文档),如果它包含文本,请执行一些OCR并将OCR文本保存在TextDocument的original_text字段中。如果文本不是英语,则将其翻译并将翻译存储在TranslatedText中的translation_text字段中。 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更改页面中,我在TextBox中显示了translation_text字段,以便可以根据需要对其进行编辑。我还想将TextDocument字段orignal_text显示为可编辑字段,因此,如果OCR混乱了,管理员也可以更改它。但是,我似乎只能将original_text字段显示为只读字段,并且无法对其进行编辑。

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字段显示无法编辑的Textarea。我想念什么?

谢谢!

标记

1 个答案:

答案 0 :(得分:0)

我想我当时处于“极限比赛”时刻。看来我的程式码正在运作。我必须清除浏览器缓存才能看到更改。 现在,我们将您返回到我们最初计划的prgram。