2015-02-20 3 views
0

Я очень новичок в django, поэтому, пожалуйста, несите меня. Я хочу, чтобы всякий раз, когда регистрировался новый пользователь, я хотел бы создать About для этого пользователя. Как я это сделаю? Пожалуйста, помогите мне. Спасибо.Создайте новый объект для зарегистрированного пользователя

просмотров:

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST or None) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/') 
     else: 
      return render(request, 'register.html', {'form':form}) 
    else: 
     form = UserCreationForm() 
     return render(request, 'register.html', {'form':form}) 

модели:

class About(models.Model): 
    user = models.OneToOneField(User) 
    gender = models.CharField(max_length=1, choices=GENDER) 
    dob = models.DateField(null=True, blank=True) 
    place = models.CharField(max_lenght=100) 

ответ

1

Если вы еще не смотрели на формы еще, вы должны прочитать эти ссылки:

https://docs.djangoproject.com/en/1.7/topics/forms/ https://docs.djangoproject.com/en/1.7/ref/forms/api/

Если вам нужно увидеть код для начала работы,

class UserCreationForm(forms.Form) or (models.Form) '''You should read up on these two''' 
    #define form attributes here 

def clean(self): 
    '''write your validations here''' 
    return self.cleaned_data 
def save(self) 

    data = self.cleaned_data 
    about = About() 
    about.user = data.get("user") 
    about.gender = data.get("gender") 
    about.place = data.get("place") 
    year = data.get("year") 
    month = data.get("month") 
    day = data.get("day") 
    about.dob = datetime(year, month, day).date() 
    about.save() 

Также профиль или член будет более интуитивным именем вашей модели, чем About. Просто даю два цента. Надеюсь, это поможет.

1

Если вы знаете, что вы создадите экземпляр About для каждого пользователя, независимо от того, как они созданы (например, ввод пользователя, через администратора или через оболочку) signals может быть очень полезным.

Так что в вашем случае:

class About(models.Model): 
    user = models.OneToOneField(User) 
    gender = models.CharField(max_length=1, choices=GENDER) 
    dob = models.DateField(null=True, blank=True) 
    place = models.CharField(max_lenght=100) 

def user_post_save(sender, instance, created, *args, **kwargs): 
    """create an about when a new user is created 

    data: 
     sender - The model class. (User) 
     instance - The actual instance being saved. 
     created - Boolean; True if a new record was created. 

     *args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments. 
    """ 
    if created: 
     About.objects.create(user=instance) 

post_save.connect(user_post_save, sender=User) 

Теперь, когда новый User создается, и About будет автоматически создан для них.

0

Вы можете переопределить метод save на UserCreationForm, расширив класс, который будет выполняться каждый раз при вызове сохранения, будет создан объект About.

class CustomUserCreationForm(UserCreationForm): 

    def save(self, commit=True): 
     instance = super(CustomUserCreationForm, self).save(commit=False) 
     about = About() 
     about.user = instance 
     about.gender = 1 
     about.place = "Indonesia" 
     about.save() 
     return instance 

Или, вы можете использовать AutoOneToOne поле с django-annoying

Смежные вопросы