2017-08-22 132 views
0

後,我的形式我做一個簡單的網站,userena的用戶註冊和自定義表單在註冊後填寫。的Django不保存註冊

但創建帳戶和表單時提交DATAS are'nt存儲。經過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() 

如果有人有一個想法?非常感謝

回答

0

你應該用一種形式的團隊或表單集的團隊成員

Django formsets documentation

,如果你不打算使用表單集,那麼這是另一種方式是:

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