Как я могу включить экземпляр агента, чтобы он был доступен в форме обновления агента, когда агент подключен к пользователю через поле "один к одному"?
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