例如我有一个这样的模型:
class Wheel(models.Model):
wheel = models.CharField(max_length=20)
class Vehicle(models.Model):
wheel = models.ForeignKey(Wheel)
当我制造一辆新车辆时,我希望绿色加号出现在我的车轮字段旁边,并允许我添加新的车轮实例。我对 django 很陌生,所以我不知道这是否可能。任何帮助表示赞赏!
例如我有一个这样的模型:
class Wheel(models.Model):
wheel = models.CharField(max_length=20)
class Vehicle(models.Model):
wheel = models.ForeignKey(Wheel)
当我制造一辆新车辆时,我希望绿色加号出现在我的车轮字段旁边,并允许我添加新的车轮实例。我对 django 很陌生,所以我不知道这是否可能。任何帮助表示赞赏!
如果您在管理部分之外实现您的表单,您将需要一个类似于 django.contrib.admin.widgets.RelatedFieldWidgetWrapper 的自定义小部件包装器。用法示例:
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, )
)
在您的实现中,将“所有者”替换为您链接到的模型。
您可以在https://gist.github.com/ebrelsford/5263306找到自定义小部件包装器以及完整示例
检查小部件django.contrib.admin.widgets.RelatedFieldWidgetWrapper
。这是 Django Admin 用来添加功能性“+”标记的小部件,在这里。
为了在您的自定义表单中使用小部件,您需要提供为admin_site
Wheel 添加页面提供服务的参数。
默认情况下,只有具有“editable=True”的字段才会添加到管理页面:
模型.py
class Wheel(models.Model):
wheel = models.CharField(max_length=20, editable=True)
class Vehicle(models.Model):
wheel = models.ForeignKey(Wheel, editable=True)