Django Custom User update с моделью "один к одному" к модели Customer

Я пытаюсь создать представление Update для модели Customer, которая имеет отношение Onetoone с моделью User(django). После пяти часов попыток создания представлений на основе функций и классов мне не удается заставить это работать. Где я допускаю ошибку?

my models.py

    class Customer(Model):
        user = OneToOneField(User, on_delete=CASCADE)
        mobile = CharField(max_length=12,null=True)
        dob = DateField(null=True)
    
        def __str__(self):
            return self.user.username

my views.py

    class ProfileUpdateView(UpdateView):
        template_name = 'forms.html'
        form_class = AdminUserUpdateForm
        model = User
        success_url = reverse_lazy('controls')
    
        def get_object(self, queryset=None):
            return Customer.objects.get(pk=self.kwargs['pk']).user
            # Not working

    def customer_list_view(request):
        customer = Customer.objects.filter(user__groups__name='customer')
        premium = Customer.objects.filter(user__groups__name='premium')
        context = {'customer': customer, 'premium': premium}
        return render(request, 'customercontrol.html', context)

my forms.py

class AdminUserUpdateForm(UserChangeForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'groups']

    mobile = CharField(max_length=30)
    dob = DateField()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = 'form-control'

    @atomic
    def save(self, commit=True):
        user = super().save(commit)
        mobile = self.cleaned_data['mobile']
        dob = self.cleaned_data['dob']
        customer = Customer.objects.get(user__pk=user.pk)
        customer.mobile = mobile
        customer.dob = dob
        if commit:
            customer.save()
        return user

мои шаблоны, где я получаю PK для запросов.

тот, кто имеет форму

{% extends "base.html" %}
{% block content %}
    <form method="post">
        {% csrf_token %}
        <table>{{ form }}</table>
        <input type="submit" value="Submit" class="btn btn-primary">
    </form>
{% endblock %}

urls.py

path('<int:pk>/groupupdate', GroupUpdateView.as_view(), name='groupdate'),
path('customercontrol', customer_list_view, name='customercontrol'),

problem

Я нашел решение своей проблемы, мне нужно было добавить функцию в представление, которая передает начальные данные в форму:

def get_initial(self):
    initial = super().get_initial()
    initial['dob'] = Customer.objects.get(pk=self.kwargs['pk']).dob
    initial['mobile'] = Customer.objects.get(pk=self.kwargs['pk']).mobile
    return initial
Вернуться на верх