Hi, I think in your view modulesView() you need to pass the project id to 
ModuleForm:

..
else :
form = ModuleForm(projectid)
..

and then you need to overwrite the constructor of ModuleForm by adding an 
__init__ function:

  def __init__(self, projectid=None, *args, **kwargs):
        super(ModuleForm, self).__init__(*args, **kwargs)
        if projectid is not None:
            self.fields['project'] = forms.ModelChoiceField(
                ...
                queryset=Project.objects.filter(id=projectid)
            )
        
something like that. --Antje

On Sunday, April 12, 2020 at 8:14:51 AM UTC+2, Mayank Tripathi wrote:
>
> Hi All,
>
> I am facing an issue, to pre-populate the Foreign Key on the web page.
> Actually i have two models Projects and Modules. 
> To create a Module, one has to select the Project and go to Module page 
> for create it, but there the Project is not populated.
>
> Below are the details... Please guide me.
>
> *models.py*
> class Project(models.Model): 
> name = models.CharField(max_length = 200, null = True)
> startdate = models.DateTimeField()
>
> def __str__(self):
> return self.name
>
> class Modules(models.Model): 
> project = models.ForeignKey(Project, null = True, on_delete = 
> models.SET_NULL) 
> modulename = models.CharField(max_length = 200, null = True)
> modulestartdate = models.DateTimeField()
>
> def __str__(self):
> return self.modulename 
>
> *forms.py*
> class ProjectForm(forms.ModelForm):
>     class Meta:
>         model = Project
>         fields = '__all__'
>
>
> class ModuleForm(forms.ModelForm): 
>     class Meta: 
>         model = Modules
>         fields = '__all__'  
>
> *views.py*
> def projectView (request):
> if request.method == 'POST':
> form = ProjectForm(request.POST) 
> if form.is_valid():
> form.save(commit=True)
>
> return render(request, 'budget/projectForm.html', {'form': form})
>
> else :
> form = ProjectForm()
> return render(request, 'budget/projectForm.html', {'form': form})
>
>
> def modulesView (request, projectid):
> project = Project.objects.get(pk=projectid)
>  
> if request.method == 'POST':
> form = ModuleForm(request.POST) 
> if form.is_valid():
> form.save(commit=True)
>
> return render(request, 'example/modulesForm.html', {'form': form})
>
> else :
> form = ModuleForm(instance=project)
> return render(request, 'example/modulesForm.html', {'form': form})
>
> *urls.py*
>     path('testproject/', views.projectView, name='projectView'),
>     path('testprojectmodule/<str:projectid>/', views.modulesView, 
> name='modulesView'),
>
> in html forms for both Project and Modules... just using {{ form.as_table 
> }}.
>
> Now after createing the Project, i used the url as 
> http://127.0.0.1:8000/testprojectmodule/1/ 
> then my Project should get pre-populated... as reached using the project 
> id which is 1 in this case, but i am getting full drop-down. Refer attached 
> image.
> Either the Project should be pre-selected.. or can make it non-editable 
> either will work for me.
>
> Please help.
>
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/26744cb1-03e3-4189-a438-0b462013bb66%40googlegroups.com.

Reply via email to