【发布时间】:2021-04-15 10:28:08
【问题描述】:
是否可以将外部数据加载到字段中进行填写?
示例:包含产品名称的字段。但是我们已经在另一个位置有产品的名称,我们只需要在默认的 django admin 的字段中列出这些产品。使用resquets。
非常感谢您的关注。
【问题讨论】:
标签: django django-models django-templates django-admin django-3.0
是否可以将外部数据加载到字段中进行填写?
示例:包含产品名称的字段。但是我们已经在另一个位置有产品的名称,我们只需要在默认的 django admin 的字段中列出这些产品。使用resquets。
非常感谢您的关注。
【问题讨论】:
标签: django django-models django-templates django-admin django-3.0
您可以尝试默认 ModelAdmin 类的 'formfield_for_foreignkey' 方法
例子:
类 MyModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): 如果 db_field.name == “汽车”: kwargs["queryset"] = Car.objects.filter(owner=request.user) return super().formfield_for_foreignkey(db_field, request, **kwargs)
此示例(来自original docs)将仅使用特定值填充“汽车”字段。 请注意,此方法适合外键。我不确定它是否符合您的要求。
【讨论】:
您可以使用外部数据源在 Django Admin 中预填充/填充字段。我猜您在 Django 应用程序之外的某个地方定义了一些选项,并将这些选项用作字符字段/整数字段的输入。
您可以在单独的 Django 表单中处理填充选择或覆盖 ModelAdmin 方法。通过创建一个单独的表单:
filter_choices = depends on your logic for loading external data
class AdminForm(forms.ModelForm):
filter_text = forms.ChoiceField(choices = filter_choices , label="Filter By",
widget=forms.Select(), required=True)
class Meta:
model = YourModel
@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
form = AdminForm
【讨论】:
我认为您正在寻找的是如何自定义 Django Admin,对吗?查看this page in the documentation 以获得更详细的说明,但这里有一个示例可能会有所帮助:
from django.contrib import admin
from .models import *
class ProductInline(admin.TabularInline):
model = Product
extra = 0
class OrderAdmin(admin.ModelAdmin):
inlines = [ProductInline]
admin.site.register(Order, OrderAdmin)
admin.site.register(Product)
当从 Django Admin 查看该订单时,这将显示附加到特定订单的所有产品。
【讨论】: