2017-08-22 22 views
0

ユーザー登録のためのuserenaとサインアップ後に記入するためのカスタムフォームを使用して簡単なWebサイトを作成します。Djangoは登録後にフォームを保存しません

しかし、アカウントが作成され、フォーム送信データが保存されていない場合。

私はフォームを更新し、すべての作業を再送信すると、しかしない新鮮サインアップ/サインイン後〜1分後に私のコード

models.py

from cms.models.pluginmodel import CMSPlugin 
from django.db import models 
from django.contrib.auth.models import User 
class Game(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.CharField(max_length=50) 
    def __str__(self): 
     return self.name 

class Tournament(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.CharField(max_length=50) 
    game = models.OneToOneField(
       Game, 
       on_delete=models.CASCADE, 
       verbose_name="related game", 
      ) 
    def __str__(self): 
     return self.name 

class TeamMember(models.Model): 
    name = models.CharField(max_length=100, unique=True) 
    def __str__(self): 
     return self.name 

class Team(models.Model): 
    name = models.CharField(max_length=100) 
    official = models.BooleanField(default=False) 
    tournaments = models.ManyToManyField(Tournament, blank=True) 
    user = models.OneToOneField(User, related_name='created_by') 
    team_member = models.ManyToManyField(TeamMember, blank=True) 
    def __str__(self): 
     return self.name 

forms.py

class TeamRegistrationForm(forms.ModelForm): 
    team_member_1 = forms.CharField(widget=forms.TextInput, label="Team member 1") 
    team_member_2 = forms.CharField(widget=forms.TextInput, label="Team member 2") 
    team_member_3 = forms.CharField(widget=forms.TextInput, label="Team member 3") 

    class Meta: 
     model = Team 
     fields = [ 
      'name', 
      ] 

    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     super(TeamRegistrationForm, self).__init__(*args, **kwargs) 

    def save(self): 
     data = self.cleaned_data 
     team = Team(name=data['name']) 
     team.user = self.user 
     team.save(commit=False) 
     team.team_member.get_or_create(name=data['team_member_1']) 
     team.team_member.get_or_create(name=data['team_member_2']) 
     team.team_member.get_or_create(name=data['team_member_3']) 
     team.save() 
があります

誰かがアイデアを持っている場合は、おかげであなたがフォームセットを使用するつもりはない場合は、チームとチームメンバー

Django formsets documentation

用フォームセットのための一つの形式を使用する必要があり、多く

答えて

0

が、これはそれに別の方法です:

forms.py:

class TeamRegistrationForm(forms.ModelForm): 
    team_member_1 = forms.CharField(widget=forms.TextInput, label="Team member 1") 
    team_member_2 = forms.CharField(widget=forms.TextInput, label="Team member 2") 
    team_member_3 = forms.CharField(widget=forms.TextInput, label="Team member 3") 

class Meta: 
    model = Team 
    fields = [ 
     'name', 
     ] 

ビュー:

form = TeamRegistrationForm(request.POST) 
if form.is_valid(): 
    team = form.save(commit=False) 
    team.user = request.user 
    team.save() 
    member1 = form.cleaned_data.get('team_member_1') 
    if member1: 
     member1 = TeamMember.objects.get_or_create(name=member1) 
     team.team_member.add(member1) 
    member2 = form.cleaned_data.get('team_member_2') 
    if member2: 
     member2 = TeamMember.objects.get_or_create(name=member2) 
     team.team_member.add(member2) 
    member3 = form.cleaned_data.get('team_member_3') 
    if member3: 
     member3 = TeamMember.objects.get_or_create(name=member3) 
     team.team_member.add(member3) 

これは良い方法ではありませんが、使用する方法です。

+0

私はエラーが発生しました。 "int()引数は文字列、バイトのようなオブジェクトまたは数字でなければなりません。" TeamMember "ではありません"助けてくれてありがとうございます – Bast

+0

@Bastチームは保存されますか?問題はメンバーですか?変数をステップごとに印刷して、それらが何でどこに問題があるかを確認してください。エラーページでエラーの原因となった行を確認することもできます。あなたが問題を見つけることができなかった場合は、私がチェックできるように印刷とエラー行の詳細を教えてください。がんばろう。 – Navid2zp

関連する問題