Hi,
This quesion is related to the common pattern 
<https://docs.djangoproject.com/en/2.0/topics/auth/customizing/#extending-the-existing-user-model>
 
of representing a siteuser (henceforth referred to as "member"), by two 
models that have aone-to-one relation:
1. A builtin `contrib.auth.models.User' model, used for authentication,  
 that holds credentials and basic information.
2. An application specific `Profile' model with additional personal  
 information, such as language for example. `Profile.user' is a  
 `OneToOneField' pointing to `auth.User'
My questions relate to the creation of such members, for which theresponsible 
view must populate and save two model instances with thesubmitted form data.
• What approaches would you recommend to implement the member creation  
form?• How could generic class-based views be efficiently leveraged to 
handle  member creation?
I briefly present my current solution below, with its limitations.
1. Form: a `ModelForm' associated to the `User' model, with extra fields  
 corresponding to the profile information.

class MemberForm(ModelForm):
    # These fields map to those on the Profile model
    # One for brevity here, but think of many more in practice
    language = forms.CharField(
        max_length=3,
        widget=forms.Select(choices=Profile.LANGUAGES)
    )


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

1. View: a `CreateView' subclass associated to the `User' model,  
 overriding the `form_valid()' method in which the `Profile' model is  
 populated by hand from the form's `cleaned_data' extra fields.

class MemberCreate(CreateView):
    form_class = PanelMemberForm

    def form_valid(self, form):
        language = form.cleaned_data['language']
        with transaction.atomic():
            user = form.save()
            Profile(user=user, language=language).save()
        return HttpResponseRedirect(self.get_success_url())



The obvious limitation I see to this approach is that when fields areadded 
or modified on the `Profile' model, both the form and the viewmust be 
carfully updated. I suspect this will not be very easilymaintained code 
when the `Profile' model grows…
Thanks in advance for any insights you might share (and for having readthus 
far)
Quentin





-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/2fac50f2-6a23-4a1d-97a7-98ca388892ab%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to