2009-06-10 17 views
0

ない私が考える新しい質問を制限するが、ここでは行く:は確かに特定のユーザー/顧客へのページビューのアクセス

私のジャンゴベースの受注システムでは、各ユーザ(スタッフではありませんが)どのCustomerProfileオブジェクトに関連していますそのユーザーを正しいCustomerオブジェクトに一致させます。この顧客のユーザは、ログインして未処理の請求書を閲覧することができます。あなたはこのような何かに移動し、顧客の請求書を表示するには:

/請求書/顧客/ 97/

(得意先請求書の#97)結構ですが、私は、ユーザーように、いくつかの認証を組み込む必要があり

/請求書/顧客/ 92 /などを手動で入力して別の顧客の請求書を表示することはできません(請求書92は別の顧客に属します)。

私はこれを持っているが、それは本当に良いコードではありません(と動作しません):

def customer_invoice_detail(request, object_id): 
    user = threadlocals.get_current_user() 
    try: 
     userprofile = UserProfile.objects.get(user=user) 
     user_customer = userprofile.customer.id 
    except UserProfile.DoesNotExist: 
     user_customer = None 
    if (request.user.is_authenticated() and user_customer is not null) or request.user.is_staff(): 
     invoice = CustomerInvoice.objects.get(pk=object_id) 
     product_list = CustomerInvoiceOrder.objects.filter(invoice=object_id) 
     context = { 
     'object': invoice, 
     'product_list': product_list, 
     } 
     return render_to_response("invoices/customer_invoice_detail.html", context, context_instance=RequestContext(request)) 
    else: 
     return HttpResponse("You are not authorised to view this invoice") 

は、これに対処するためのより良い/簡単な方法でなければなりません - 任意のアイデア?

乾杯

答えて

2

は、ユーザーと呼ばれる、あなたの請求書のモデルにフィールドを追加します。

user = models.ForeignKey(User, related_name="invoices") 

、このような特定のユーザーのレコードを取得:指定したユーザーのための請求書を取得

invoice = CustomerInvoice.objects.get(pk=object_id, user=request.user) 

は逆で、その後は簡単です関係:

request.user.invoices.all() 

また、@login_requiredデコレータを見てください。

2

私はあなたの顧客のモデルのいくつかのビジネス・ロジックを作るお勧めします。この方法では、get_invoices()メソッドを使用して、その顧客の請求書の一覧のみを返すことができます。このメソッドは、is_authenticated()メソッドを呼び出すことで、現在の状態が保護された顧客データの取得を許可するか、または例外が発生することを保証します。

これにより、お客様のコードが顧客の請求書を取得しようとする場所に関係なく、現在の状態が請求書にアクセスできない場合は常に例外がスローされ、不整合な動作を心配する必要はありません。これらのメソッドを使用している限りです。

関連する問題