私は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
ユーザーモデルとサプライヤサインアップモデルとの間に関係があると仮定して、models.pyを表示します(これは、おそらく関係が必要なためです)。 –
別のデータベースのテーブルを引き出すことを意味しますか?マルチデータベース? – aircraft
@wobbily_colご返信ありがとうございます。私の現在の 'models.py'と 'forms.py'コードを含むように投稿を更新しました。あなたは関係によって何を意味しますか?どのように私はこれを設定するのですか? –