2016-09-20 1 views
-1

私はdjangoプロジェクトの登録モジュールに取り組んでいます。ユーザーを登録するため、私はdjangoで1つのクエリを使用してデータを結合モデルに保存します

from django.contrib.auth.models import User 
class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    start_date = models.DateField() 
    phone_number = models.CharField(max_length=12) 
    address = models.CharField(max_length=225) 
    subscription = models.BooleanField(default=False) 

Profileテーブルが正常に作成された1つの以上のモデルのプロファイルを作成して、このテーブルを拡張するためのAUTH_USERテーブルを使用しています。今私がしたいのは、登録フォームを提出するときです。登録フォーム内のプロファイルモデルに関するフィールドは、auth_userモデルに関連するフィールドを挿入した後に自動的に挿入する必要があります。 私はauth_userモデルに最初にデータを挿入して、そのIDを取得した後で再びプロファイルテーブルにデータを挿入したくないという意味です。 1つのクエリで完全なレコードを挿入したいとします。出来ますか ?

+0

いいえ1つのクエリまたは2つの場合はどうして気になりますか? –

+0

私はPHPの開発者ですが、このプロジェクトではdjangoで行う必要があります。phpのCakephpフレームワークでは、よりクリーンでシンプルなコードを作成するために、1つのクエリを使用して関連テーブルにレコードを挿入できます。 – Pankaj

答えて

0

登録フォームを定義して、Profileのフォームをsaveの方法で上書きして、Userモデルを作成することができます。参照するサンプルコード:

class RegistrationForm(forms.ModelForm): 
    start_date = forms.DateField() 
    phone_number = forms.CharField() 
    address = forms.CharField() 
    subscription = forms.BooleanField() 

    class Meta: 
     model = User 

    def save(self, commit=True): 
     instance = super(RegistrationForm, self).save(commit=commit) 
     profile = Profile(user=instance, start_date=self.cleaned_data['start_date'], phone_number=self.cleaned_data['phone_number'], address=self.cleaned_data['address'], subscription=self.cleaned_data['subscription']) 
     profile.save() 
     return instance 


def register(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      # do anything after user created 
     else: 
      raise Error('form validate failed') 
    else: 
     # handling the GET method 
+0

レコードの場合、これは2つのクエリです。 – e4c5

関連する問題