Как я могу включить экземпляр агента, чтобы он был доступен в форме обновления агента, когда агент подключен к пользователю через поле "один к одному"?

models.py

class Auto(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE)

    def __str__(self):
        return self.user.username

class User(AbstractUser):
    pass
    # To categorize users either as an organisor or as an agent
    is_organisor = models.BooleanField(default=True)
    is_agent = models.BooleanField(default=False)
    agent_details = models.TextField(null = True, blank=True)

class Agent(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE)
    organisation = models.ForeignKey("Auto", on_delete=models.CASCADE)
    def __str__(self):
        return self.user.username

views.py

class Agent_update(ManualLoginRequiredMixin, generic.UpdateView):
    template_name = 'agent-update.html'
    form_class = AgentUpdateForm
    queryset = Agent.objects.all()
    context_object_name = 'agents'

    def get_success_url(self):
        return reverse('reverse url')

agent-update.html

<form method="post">
    {% csrf_token %}
    {{form|crispy}}
        <button>Update Agent</button>
</form>

После запуска сервера форма работает, но не отображает экземпляр конкретного обновляемого агента.

Мне кажется, что это происходит потому, что модель агента связана с моделью пользователя. Любая помощь будет принята с благодарностью

.

Наконец, мне удалось исправить это, переопределив мою AgentUpdateForm с помощью функции def__init__ и FormView

.

forms.py

class AgentUpdateForm(forms.Form):
    username = forms.CharField(max_length=20)
    first_name = forms.CharField(max_length=20)
    last_name = forms.CharField(max_length = 20)
    email = forms.EmailField()
    agent_details = forms.Textarea()

    def __init__(self, *args, **kwargs):
        agent = kwargs.pop('agent')
        username = User.objects.get(username = agent.user.username)
        first_name = User.objects.get(first_name = agent.user.first_name)
        last_name = User.objects.get(last_name = agent.user.last_name)
        email = User.objects.get(email = agent.user.email)
        agent_details = User.objects.get(agent_details = 
              agent.user.agent_details)
        super(LeadCreateForm, self).__init__(*args, **kwargs)
        self.fields['username'].queryset = username
        self.fields['first_name'].queryset = first_name
        self.fields['last_name'].queryset = last_name
        self.fields['email'].queryset = email
        self.fields['agent_details'].queryset = agent_details

views.py

class Agent_update(ManualLoginRequiredMixin, generic.FormView):
    model = User
    template_name = 'agent-update.html'
    form_class = AgentUpdateForm
    queryset = Agent.objects.all()
    context_object_name = 'agents'

    def get_success_url(self):
        return reverse('agents:agent-list')

    def get_form_kwargs(self, **kwargs):
        kwargs = super(Lead_create, self).get_form_kwargs(**kwargs)
        kwargs.update({
            'agent': Agent.objects.get(id=self.kwargs["pk"])
        })
        return kwargs
Вернуться на верх