Создание и обновление пользовательских профилей в Django - PullRequest
1 голос
/ 14 ноября 2011

Джанго, новичок здесь, спотыкается о документы.Я пытаюсь создать профиль пользователя, используя Django «UserProfiles», но у меня возникли небольшие проблемы с поиском правильного способа установки кода на основе документов Django.

Вот мой код, основанный надокументы.(Create_user_profile составляет 100% от документации).

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save


class UserProfile(models.Model):
    user = models.OneToOneField(User)

    location = models.CharField(max_length = 100)
    website = models.CharField(max_length=50)
    description = models.CharField(max_length=255)
    fullName = models.CharField(max_length=50)
    email = models.EmailField(max_length = 100, blank = False)
    created = models.DateTimeField(auto_now_add=True)
    private = models.BooleanField()


    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            UserProfile.objects.create(user=instance)

    post_save.connect(create_user_profile, sender=User)

Какой параметр -proper-up для установки и сохранения этих полей?

Например, если у меня есть модели User и UserProfile в одной форме (например, в регистрационной форме), как мне сначала создать, а затем обновить все, прежде чем окончательно сохранить?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

как мне сначала создать, а затем обновить все, прежде чем окончательно сохранить

Это не отдельные шаги.Когда вы создаете или обновляете запись в Django, вы сохраняете ее в базе данных.

Для регистрационной формы я бы рекомендовал установить ее как ModelForm для User записей, а затем указатьдополнительные поля, которые вы хотите сохранить в профиле и сохранить их отдельно в функции сохранения, например ...

class RegistrationForm(forms.ModelForm):
    location = forms.CharField(max_length=100)
    # etc -- enter all the forms from UserProfile here

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', and other fields in User ]

    def save(self, *args, **kwargs):
        user = super(RegistrationForm, self).save(*args, **kwargs)
        profile = UserProfile()
        profile.user = user
        profile.location = self.cleaned_data['location']
        # and so on with the remaining fields
        profile.save()
        return profile
0 голосов
/ 14 ноября 2011

Вы можете вызывать profile.user.save () и после него profile.save (), когда вам нужно сохранить данные из регистрационной формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...