2017-08-22 83 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