【问题标题】:Load external data into an admin model - DJANGO将外部数据加载到管理模型中 - DJANGO
【发布时间】:2021-04-15 10:28:08
【问题描述】:

是否可以将外部数据加载到字段中进行填写?

示例:包含产品名称的字段。但是我们已经在另一个位置有产品的名称,我们只需要在默认的 django admin 的字段中列出这些产品。使用resquets。

非常感谢您的关注。

【问题讨论】:

    标签: django django-models django-templates django-admin django-3.0


    【解决方案1】:

    您可以尝试默认 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)将仅使用特定值填充“汽车”字段。 请注意,此方法适合外键。我不确定它是否符合您的要求。

    【讨论】:

      【解决方案2】:

      您可以使用外部数据源在 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
      

      【讨论】:

        【解决方案3】:

        我认为您正在寻找的是如何自定义 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 查看该订单时,这将显示附加到特定订单的所有产品。

        【讨论】:

          猜你喜欢
          • 2012-10-12
          • 1970-01-01
          • 2013-11-29
          • 2016-12-13
          • 2016-02-18
          • 1970-01-01
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          相关资源
          最近更新 更多