Я пытаюсь показать форму обновления для модели, в которой я также хочу показать поле родительского объекта (только 1 поле) в том же виде.
Я создал формы. Форма со всей модельюполя и 1 родительское поле и хотят показать ту же форму, предварительно заполненную в представлении обновления.
models.py
class Teammember(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
location = models.CharField(max_length=50)
designation = models.CharField(max_length=50)
date_of_joining = models.DateField()
current_status = models.CharField(max_length=50)
def __str__(self):
return self.first_name + " " + self.last_name
def get_absolute_url(self):
return reverse('teammember-detail', kwargs={'pk': self.pk})
forms.py
class TeammemberUpdateForm(forms.Form):
first_name = forms.CharField(max_length=50, label='First name')
last_name = forms.CharField(max_length=50, label='Last name')
email = forms.EmailField(label='Email')
location = forms.ChoiceField(choices=TP_TM_Location, label='Location')
designation = forms.ChoiceField(choices=TP_TM_Designation, label='Designation')
date_of_joining = forms.DateField(label='Date of joining',
widget=forms.TextInput(attrs={'type': 'date'}),
initial=date.today())
current_status = forms.ChoiceField(choices=TP_Status, label='Current status')
username = forms.CharField(label='Login username') #this field is referring to parent object
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['current_status'].initial = "Initial"
views.py
class TeamUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
template_name = 'project_tracker/teammember/teammember_form.html'
form_class = TeammemberUpdateForm
model = Teammember
#fields = ['first_name','last_name','email','location','designation','date_of_joining','current_status', 'username']
def get(self, request, *args, **kwargs):
#self.object = self.get_object()
print("object id: " ,self.get_object().id)
return super(TeamUpdateView, self).get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
formclass = self.get_form_class()
print(self.get_form_class())
#print(formclass.username)
#formclass.username = 'ide'
#context['username']=self.get_object().id
#context['form']['username'] = 'ide'
print(context['form']['username'])
#context['form'] = self.form_class(instance=self.object)
return context
def get_form(self, *args, **kwargs):
"""
Returns an instance of the form to be used in this view.
# note: you can access request using: self.request
"""
form = super().get_form()
form.fields['username'] = 'ide'
return form
# def get_form_kwargs(self):
# kwargs = super(EmailView, self).get_form_kwargs()
# kwargs['users'] = self.users
# return kwargs
def form_valid(self, form):
return super().form_valid(form)
def test_func(self):
#teamMember = self.get_object()
return True
Поскольку каждый teamMember имеет имя пользователя, я также хочу показать соответствующее имя пользователя в представлении обновлений членов команды. Но в настоящее время я не могу показать поле имени пользователя, предварительно заполненное в форме обновления.