我正在学习Django Framework,我有一个问题。为了帮助您理解,我将尝试使用以下示例进行解释:
假设我们在db中有一些表:
CREATE TABLE names (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100));
我的格式是 Django Admin :
<form>
<textarea name="names"></textarea>
<input type="submit" name="sbt" value="Submit">
</form>
用户在表单的输入names
中输入了内容并提交了。然后,脚本捕获此数据并将其拆分为数组(str.split("\n")
)并循环添加到表名称!
我很多地说:
感谢。
答案 0 :(得分:0)
首先,你必须创建一个django模型。
将此代码放入models.py
。
class Names(models.Model):
name = models.CharField(max_length = 100)
然后你必须创建管理模型。
将此代码放入admin.py
。
class NamesAdmin(admin.ModelAdmin):
list_display = ['name']
# whatever you want in your admin panel like filter, search and ...
admin.site.register(Names, NamesAdmin)
我认为它符合您的要求。对于拆分名称,您可以覆盖保存模型方法并在其中拆分名称。但是如果你想要一个额外的表格,你可以轻松创建一个django模型表格。
将代码放在admin.py
,views.py
或forms.py
class NamesForm(forms.ModelForm)
class Meta:
model = Names
这是你的模特和形式。因此,如果您想将表单添加到django管理面板,则必须在django admin中为其创建一个视图。为此,请创建一个常见的视图。
将代码放入admin.py
或views.py
。
def spliter(req):
if req.method == 'POST':
form = NamesForm(req.POST)
if form.is_valid():
for name in form.cleaned_data['names'].split(' '):
Names(name = name).save()
return HttpResponseRedirect('') # wherever you want to redirect
return render(req, 'names.html', {'form': form})
return render(req, 'names.html', {'form': NamesForm()})
请注意,您必须创建names.html
并将以下代码放入html页面。
{% extends 'admin/base_site.html' %}
{% block content %}
<!-- /admin/names/spliter/ is your url in admin panel (you can change it whatever you want) -->
<form action="/admin/names/spliter/" method="post" >{% csrf_token %}
{{ form }}
<input type="submit" value="'Send'" >
</form>
{% endblock %}
这是您的观点,您可以随处使用它。但是,如果您只想让管理员有权查看此页面,则必须在NamesAdmin
课程中添加此方法。
def get_urls(self):
return patterns(
'',
(r'^spliter/$', self.admin_site.admin_view(spliter)) # spliter is your view
) + super(NamesAdmin, self).get_urls()
就是这样。我希望这可以帮到你。