我决定将管理网站的一些功能移到前端。功能包括管理一个带有一些外键内联的模型。
为此我已经安装了django-dynamic-formset JQuery插件(链接git)并且已经挣扎了几天。这是problems之一。
Django管理员已经实现了相同的功能。我可以根据需要添加,修改,删除内联和修改模型实例。 我想知道为什么我应该使用这个JQuery插件,以及为什么在互联网上没有这么多关于这个主题的好教程?
我需要一个很好的最新例子,说明如何在没有第三方JS文件的情况下在前端使用django formsets或inline formsets。如果它有链接(不是复选框)来删除内联项并添加将正确添加新内联的按钮,我会很高兴。
更具体,因为该问题被认为过于宽泛:
我有两个模特School和SchoolPlace:
class School(models.Model):
name = models.CharField(_('School name'), max_length=100)
class SchoolPlace(models.Model):
school = models.ForeignKey(School, verbose_name=_('school place'), related_name='school_places', blank=True, null=True)
name = models.CharField(_('School place name'), max_length=200)
city = models.ForeignKey(City, blank=True, null=True, verbose_name=_('city'),
help_text='city')
还有相应的表格:
class SchoolForm(forms.ModelForm):
name = forms.CharField(
label=_('Name'),
widget=forms.TextInput(attrs={
'placeholder': _('school name')}),
max_length=100, required=True)
class SchoolPlaceForm(forms.ModelForm):
name = forms.CharField(label=_('Name'),
widget=forms.TextInput(
attrs={'placeholder': _('school place name')}),
max_length=200,
required=False)
city = forms.ModelChoiceField(label=_('City'),
widget=forms.Select(attrs={'class': 'ui search dropdown'}),
queryset=City.objects.all(), required=False)
class Meta:
model = SchoolPlace
fields = ['name','city']
exclude = ['school']
我想以与Django管理员相同的方式编辑这两个模型,但仅限于我自己的前端。至于所有js文件已经在django.contrib.admin中,我想在不使用辅助应用程序和插件的情况下进行。
答案 0 :(得分:1)
我建议您使用管理表单(在您的视图中)或管理员视图(在自定义网址上),只需更改管理模板,甚至只需加载管理javascript,您就可以在管理模板中找到它。 / p>
答案 1 :(得分:1)
此任务需要前端和后端两侧的支持。
似乎最简单的方法是在前端使用django-admin表单,如果这对你来说是可以接受的。
任何django管理表单都会识别URL中的?_popup=1
参数,以禁止管理页面装饰并仅提供表单。将包含所有必需的JavaScript和CSS样式。因此,管理表单可以显示在iframe
的前端。在JavaScript级别上进行小规模的黑客攻击仍需要将iframe
的大小调整为表单并通知页面然后关闭表单。