2017-11-23 15 views
0

私はDjangoとWeb開発一般に比較的新しいです。基本的には、顧客とサプライヤという2種類のユーザーを持つWebサイトを構築しようとしています。顧客とサプライヤはともに、Djangoに組み込まれた 'django.contrib.auth import login -forms.Form'を使用して作成され、my_mySQLデータベースの 'auth_user'テーブルに保存されたユーザアカウント(ユーザ名、電子メール、およびパスワードを含む) 。ログインしたユーザーにデータベースモデルの情報を表示します

しかし、サプライヤは、 'SupplierSignupForm'という 'forms.ModelForm'を使用して作成され、 'auth_user'という別のテーブルに保存された、より詳細なプロファイル(名前、バイオ、イメージなど) home_suppliersignup '。

サプライヤーがログインすると、ヘッダーの「マイプロファイル」リンクをクリックして、自分のデータベースの「home_suppliersignup」テーブルにあるプロファイルに移動できます。現在、私は彼らのセッション情報を使用して、テーブルからユーザーIDでログインして「AUTH_USER」と呼び、その後、それぞれの「AUTH_USER」プロフィールにリンクすることを使用する方法を知っている:

views.py

user = request.user 

テンプレート

<a href="{% url 'supplier_profile' id=user.id %}">My profile</a> 

urls.py

url(r'^supplier-profile/(?P<id>[0-9]+)', supplier_profile, name="supplier_profile") 

しかし、私はプルアップするためにこれを使用する方法がわかりません他のデータベーステーブルからのそれらの情報(すなわち、 home_suppliersignup)。

任意の助けもいただければ幸いです!

私の現在のコード:あなたは、クラスベースの汎用ビューを使用してないあると仮定すると

models.py

from __future__ import unicode_literals 
    from django.db import models 
    from django.core.urlresolvers import reverse 
    from django.contrib.auth.models import User 

    class SupplierSignUp(models.Model): 

     LOCATION_CHOICES=(
      ("Central London", "Central London"), 
      ("North London", "North London"), 
      ("East London", "East London"), 
      ("South London", "South London"), 
      ("West London", "West London"), 
     ) 

     user = models.ForeignKey(User, on_delete=models.CASCADE, null=True) 
     name = models.CharField(max_length=50) 
     bio = models.CharField(max_length=50) 
     area = models.CharField(max_length=50, choices=LOCATION_CHOICES, null=True) 
     booking_link = models.CharField(max_length=100, null=True) 
     timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 

     def __str__(self): 
      return self.email 

     def get_absolute_url(self): 
      return reverse("supplier_profile", kwargs={"id": self.id}) 

forms.py

from django import forms 
    from .models import SupplierSignUp 
    from django.contrib.auth import (
     authenticate, 
     get_user_model, 
     login, 
     logout, 
     ) 
    from django.contrib.auth.models import User, Group 

    User = get_user_model() 

    class SupplierSignUpForm(forms.ModelForm): 
     class Meta: 
      model = SupplierSignUp 
      fields = ['name', 'bio', 'area', 'booking_link'] 

    class UserLoginForm(forms.Form): 
     username = forms.CharField() 
     password = forms.CharField(widget=forms.PasswordInput) 

     def clean(self, *args, **kwargs): 
      username = self.cleaned_data.get("username") 
      password = self.cleaned_data.get("password") 

      if username and password: 
       user = authenticate(username=username, password=password) 
       if not user: 
        raise forms.ValidationError("This user does not exist") 

       if not user.check_password(password): 
        raise forms.ValidationError("Incorrect password") 

       if not user.is_active: 
        raise forms.ValidationError("This user is no longer active") 

      return super(UserLoginForm, self).clean(*args, **kwargs) 

    class UserRegisterForm(forms.ModelForm): 
     username = forms.CharField() 
     email = forms.EmailField(label="Email Address") 
     email2 = forms.EmailField(label="Confirm Email", widget=forms.TextInput(attrs={'autocomplete':'false'})) 
     password = forms.CharField(widget=forms.PasswordInput) 
     class Meta: 
      model = User 
      fields = [ 
       'username', 
       'email', 
       'email2', 
       'password', 
      ] 

     def clean_email2(self): 
      email = self.cleaned_data.get('email') 
      email2 = self.cleaned_data.get('email2') 
      if email != email2: 
       raise forms.ValidationError("Emails must match") 

      email_qs = User.objects.filter(email=email) 
      if email_qs.exists(): 
       raise forms.ValidationError("This email has already been registered") 

      return email 
+1

ユーザーモデルとサプライヤサインアップモデルとの間に関係があると仮定して、models.pyを表示します(これは、おそらく関係が必要なためです)。 –

+0

別のデータベースのテーブルを引き出すことを意味しますか?マルチデータベース? – aircraft

+0

@wobbily_colご返信ありがとうございます。私の現在の 'models.py'と 'forms.py'コードを含むように投稿を更新しました。あなたは関係によって何を意味しますか?どのように私はこれを設定するのですか? –

答えて

0

、これを試してみてください。

user=request.user 
SupplierSignUp.objects.get(user=user) 

あなたはログインしたユーザーをリクエストから受け取りますが、ユーザーがお互いのプロフィールを見ることができるようにしたい場合を除き、urls.py /テンプレートにユーザーIDを指定する必要はありません。

関連する問題