0

Django Frameworkを学んでいますが、質問があります。あなたが理解するのを助けるために、私は以下の例を使って説明しようとします:

dbに次のようなテーブルがあるとします。

CREATE TABLE names (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100));

そして、私はDjangoAdminのフォームをそのまま持っています:

<form>
    <textarea name="names"></textarea>
    <input type="submit" name="sbt" value="Submit">
</form>

ユーザーはフォームの入力に何かを入力namesして送信しました。次に、スクリプトがこのデータをキャッチして配列()に分割しstr.split("\n")、サイクルでテーブル名に追加します。

そして、私は多くの質問をします:

  1. Django Adminにフォームを追加するにはどうすればよいですか?
  2. フォームデータをキャッチして、このデータをデータベースのsomethinkテーブルに追加するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

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)

ご要望にお応えできると思います。また、名前を分割する場合は、save modelメソッドをオーバーライドして、そこで名前を分割できます。ただし、追加のフォームが必要な場合は、djangoモデルフォームを簡単に作成できます。

admin.pyviews.pyまたはのような場所にコードを配置しますforms.py

class NamesForm(forms.ModelForm)
    class Meta:
        model = Names

それがあなたのモデルと形です。したがって、フォームをdjango管理パネルに追加する場合は、djangoadminでそのビューを作成する必要があります。これを行うには、共通のビューを作成します。

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()

それでおしまい。これがお役に立てば幸いです。

于 2013-02-03T05:00:45.583 に答える