Создать новый объект для вновь зарегистрированного пользователя

Я очень новичок в Джанго, поэтому, пожалуйста, потерпите меня. Я хочу, чтобы каждый раз, когда регистрировался новый пользователь, я хотел бы создать 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)

3 ответа

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

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 экземпляры для каждого пользователя, независимо от того, как они созданы (например, пользовательский ввод, через администратора или через оболочку), сигналы могут быть очень полезными.

Итак, в вашем случае:

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 будет автоматически создан для них.

Вы можете переопределить save метод на UserCreationForm расширяя класс, чтобы каждый раз, когда вы вызываете save, 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 поле с джанго-надоедливым

Другие вопросы по тегам