在所有模型上覆盖 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
我需要将语言相关字段添加到 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