2

Django バージョン 1.8.16 pyodbc バージョン: 3.0.11b16

プロジェクトの表示/送信フォームを作成しようとしています。私が達成する必要がある基本的な目的は、MS SQL Server 2014 でストアド プロシージャを使用してフォーム内のデータを表示および編集/保存することです。ビュー ページでストアド プロシージャを使用できますが、編集では使用できませんでした。アイテムを追加して、新しいアイテムを追加します。

models.py

class procedures():
def view_patientsp(self, patid):
    cursor = connection.cursor()
    ret = cursor.execute("EXEC PR_PRES_viewpatient @uid=?  ", (patid))
    cursor.close()
    return ret


class Patient(models.Model):
    patientid = models.AutoField(db_column='PatientID', primary_key=True)  
    pyear = models.DecimalField(db_column='Pyear', max_digits=10, decimal_places=0, blank=True, null=True)  
    dref = models.DecimalField(db_column='DRef', max_digits=10, decimal_places=0, blank=True, null=True)  
    title = models.TextField(db_column='Title', blank=True, null=True)  
    fname = models.TextField(db_column='FName', blank=True, null=True)  
    lname = models.TextField(db_column='LName', blank=True, null=True)  
    dob = models.DateTimeField(db_column='DOB', blank=True, null=True)  
    pamonth = models.TextField(db_column='PAMonth', blank=True, null=True)  
    payear = models.TextField(db_column='PAYear', blank=True, null=True)  
    padays = models.TextField(db_column='PADays', blank=True, null=True)  
    sex = models.TextField(db_column='Sex', blank=True, null=True)

ビュー.py

def view_patient(request):
    if request.method == 'POST':
        form = viewpatientform(request.POST)
        return render(request, 'lis/view.html', {'form': form})
    else:
        form = viewpatientform()
        if form.is_valid():
            procedure = procedures()
            ret = procedure.view_patientsp(request.POST['fields'])
        return render_to_response('lis/view.html', {'form': form})

urls.py

urlpatterns = [
url(r'^$', views.pat_list, name='index'),
url(r'^view/(?P<patid>\d+/)$', views.view_patient, name='viewpatient'), ]

view.html

{% block body %}
{% load materializecss %}
{{ form|materializecss }}
<button type="submit" class="btn btn-primary">Submit</button>
{% endblock  %}
4

1 に答える 1

1

いくつかのオプションがあります。別の言語で記述され、ストアド プロシージャを備えた SQL Server に支えられた非常に大規模なサイトを使用している同様のプロジェクトがあり、ゆっくりと、しかし確実に Django に移行しているため、ここでそれらの概要を説明します。

時間の経過とともに完全な書き直しを目指しています。これは、ORM が非常に強力であるため、ストアド プロシージャのロジックを Django のモデルとビューに置き換えることを意味します。これにより、繰り返しが減り、再利用性が大幅に向上するため、コードの総量が削減されます。

Django のような機能を使用inspectdbして、データベースと対話するための Django モデルの初期セットを生成できます。多少の修正が必要ですが、これにより、単純なルックアップ テーブルの更新を行うために 3 つのレイヤーをコーディングするのではなく、古いデータベースでの crud 操作にいくつかの機能 (Django の admin など) を使用できるようになりました。admin をカスタマイズすることはお勧めしませんが、Django がどのように動作するかを理解するには、admin がうまく機能するようにそれを使用するのが良い方法です。

テンプレートやフォームなどの Django の機能の多くを使用して、ストアド プロシージャを呼び出すことができます。たとえば、 ではFormView、次のようなことができます。

class MyFormView(FormView):
    template_name = 'home.html'
    form_class = MyForm
    success_url = '/hooray/'

    def form_valid(self, form):
        sender = form.cleaned_data['sender']
        message = form.cleaned_data['message']

        cursor = connections['default'].cursor()
        cursor.execute('EXEC usp_insert_message @sender = ?, message = ?', sender, message)

        return super(MyFormView, self).form_valid(form)

ただし、FrankenDjango のコーディングには注意してください。移行中は、認証を共有して両方の Web サイトを並行して実行できるように細心の注意を払ってきました。これにより、新しいコード ベースで適切な方法で作業を行いながら、時間の経過とともに機能を新しい Django サイトに移行することができます。モデル、ビュー、およびテンプレートを正しい方法で使用する流れに慣れると、特に Django のすぐに使用できるパッケージの豊富なエコシステムを使用して、物事をすばやく移行し始めることができることに驚くでしょう。

最後に 1 つ: Django データベース エンジンにdjango-pyodbc-azure(SQL ServerまたはAzure で動作する) を使用することを強くお勧めします。私は、それが最も積極的に維持されており、うまく機能していることに気づきました。次のように Django 1.8 にインストールできます。

pip install django-pyodbc-azure<1.9

詳細については、https ://github.com/michiya/django-pyodbc-azure をご覧ください。

幸運を!

于 2016-12-14T14:28:12.913 に答える