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