Django -如何重新创建或导入django管理绿色加号来添加新的相关示例?

7qhs6swi  于 2023-02-20  发布在  Go
关注(0)|答案(4)|浏览(116)

例如,我有一个这样的模型:

class Wheel(models.Model):
    wheel = models.CharField(max_length=20)

class Vehicle(models.Model):
    wheel = models.ForeignKey(Wheel)

当我制作一个新的车辆时,我希望在我的方向盘区域旁边出现一个绿色的加号,允许我添加新的方向盘示例。我对django还很陌生,所以我不知道这是否可行。任何帮助都是非常感谢的!

xlpyo6sf

xlpyo6sf1#

如果你在admin部分之外实现表单,你需要一个类似于django. contrib. admin. widgets. RelatedFieldWidgetWrapper的自定义小部件 Package 器。

from .models import Owner
from .widgets import AddAnotherWidgetWrapper   # our custom widget wrapper

class PickOwnerForm(forms.Form):
    owner = forms.ModelChoiceField(
    queryset=Owner.objects.all().order_by('name'),
    widget=AddAnotherWidgetWrapper(forms.Select(),Owner, )
)

在您的实现中,将“Owner”替换为您要链接到的模型。
您可以在-https://gist.github.com/ebrelsford/5263306中找到定制的小部件 Package 器沿着完整的示例

q7solyqu

q7solyqu2#

检查小部件django.contrib.admin.widgets.RelatedFieldWidgetWrapper,Django管理员用它来添加功能性的'+'标记。
为了在自定义表单中使用小部件,需要提供用于Wheel添加页面的admin_site参数。

1wnzp6jl

1wnzp6jl3#

默认情况下,只有"editable = True"的字段才会添加到管理页面:
ModelAdmin.fields

    • 型号. py**
class Wheel(models.Model):
    wheel = models.CharField(max_length=20, editable=True)

class Vehicle(models.Model):
    wheel = models.ForeignKey(Wheel, editable=True)
li9yvcax

li9yvcax4#

下面是一个如何在admin**之外使用RelatedFieldWidgetWrapper**和AutocompleteSelect(当然也可以是Select)的例子。这也展示了如何根据需要包含js和css:

from django import forms
from django.contrib.admin import site as admin_site
from django.contrib.admin import widgets

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        db_field = self.instance._meta.get_field("related")

        self.fields["related"] = ModelChoiceField(
            self.fields["related"].queryset,
            widget=AutocompleteSelect(db_field, admin_site),
        )
        self.fields["related"].widget = widgets.RelatedFieldWidgetWrapper(
            widget=self.fields["related"].widget,
            rel=db_field.remote_field,
            admin_site=admin_site,
        )

    class Meta:
        model = MyModel
        fields = ("related",)

    class Media:
        js = [
            "admin/js/jquery.init.js",
            "admin/js/admin/RelatedObjectLookups.js",
        ]
        css = {"all": ("admin/css/forms.css",)}

相关问题