在所有模型上覆盖 ModelAdmin return 中的 get_fields 此字段

overriding get_fields in ModelAdmin return this fiels on all model

我需要将语言相关字段添加到 ModelAdmin,以便在之后另存为 json。

但是这些字段出现在我的应用程序的所有模型中。为什么?

例如一个简单的应用程序:

models.py:

from django.db import models

class TestModel2(models.Model):
    txt_field = models.TextField()

class TestModel(models.Model):
    txt_field = models.TextField()

admin.py:

from moduleadmin.models import TestModel, TestModel2
from django.conf import settings
from django import forms

class TestModelAdmin(admin.ModelAdmin):

    def get_fields(self, request, obj=None):
        my_fields = super(TestModelAdmin, self).get_fields(request, obj)
        new_fields = [(lang[0], forms.CharField(max_length=50, required=(lang[0] == settings.LANGUAGE_CODE))
            ) for lang in settings.LANGUAGES]
        for f in new_fields:
            if f[0] not in my_fields:
                my_fields.append(f[0])
            self.form.declared_fields.update({f[0]: f[1]})
        return my_fields

admin.site.register(TestModel, TestModelAdmin)
admin.site.register(TestModel2)

在 settings.py 中我添加了:


LANGUAGES = (
    ('fr', 'French'),
    ('en', 'English'),
)

因此,如果我尝试添加一个 TestModel2 条目,没关系。 但是,如果我去 TestModel 添加输入表单,然后 return 到 TestModel2 添加,我会在表单中显示这两个字段。

你能帮帮我吗?或者也许有更好的方法?

谢谢。

如果我错了请纠正我,但您似乎希望拥有基于您拥有的语言的字段。如果是这种情况,您最好查看一些第 3 方库,例如 django-modeltranslation