django314
так есть же self.user.id.
Или профили не N к N по иду, а как-то по-особому ?
вот тут надо
user = models.ForeignKey(User, related_name=“profile”)
и в инстанса User будет атрибут profile который и будет связанным профилем
mysql> show fields from myapp1_exuserprofile;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | UNI | NULL | |
| first_name | varchar(100) | NO | | NULL | |
...
class ExUserProfileFormUpdate(generic.UpdateView): model = ExUserProfile fields = '__all__'
def get_object(self, queryset=None): return self.request.user
class ExUserProfileFormUpdate(LoginRequiredMixin, generic.UpdateView): login_url = "/signup/" form_class = ExUserRegistrationForm fields = '__all__' def get_object(self, queryset=None): return self.request.user
Singularity
django314просто сделать url “profile/edit” и выбирать модель на основании self.user.id надо только в UpdateView переназначить один метод
class UserUpdateForm(RegistrationForm): username = forms.CharField(label = u'Логин:') first_name = forms.CharField(label = u'Имя:') class Meta: model = ExUserProfile
class ExUserProfileFormUpdate(LogiRequiredMixin, generic.UpdateView): def form_valid(self, form): # тут сохраняем return super(ExUserProfileFormUpdate, self).form_valid(form)
class ExUserProfileFormUpdate(generic.UpdateView): model = ExUserProfile fields = '__all__' def get_object(self, queryset=None): auth_user = User.objects.get( username = self.request.user.get_username() ) return ExUserProfile.objects.get( user_id = auth_user.id )