Все, что я пытаюсь сделать, - отфильтровать выпадающий список подпрограмм, основываясь на том, какая программа нажата.В настоящее время я использую отношения один ко многим, чтобы сохранить множество подпрограмм в узле программы.Я думал, что это будет обрабатывать вещи, но он просто возвращает все подпрограммы независимо от того, какая программа выбрана.
views.py
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = fields = ['asset_name', 'road_name', 'suburb', 'lifecycle', 'program', 'subprogram', 'internal_budget', 'external_budget', 'budget_year', 'finance_description', 'project_description', 'reference_description', 'attachment']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
models.py
class Program (models.Model):
program_name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.program_name
def get_absolute_url(self):
return reverse('program-create')
class SubProgram (models.Model):
# program = models.OneToOneField(Program, on_delete=models.CASCADE, primary_key=True)
program = models.ForeignKey(Program, on_delete=models.CASCADE)
subprogram_name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.subprogram_name
def get_absolute_url(self):
return reverse('subprogram-create')
class Post (models.Model):
asset_name = models.CharField(max_length=150)
road_name = models.CharField(max_length=150)
suburb = models.CharField(max_length=150)
lifecycle = models.CharField(max_length=20, choices=CYCLE_CHOICES)
program = models.ForeignKey(Program, on_delete=models.CASCADE)
subprogram = models.CharField(max_length=20, choices=SUBPROGRAM_CHOICES)
internal_budget = models.IntegerField(blank=True)
external_budget = models.IntegerField(blank=True)
budget_year = models.CharField(max_length=20, choices=BUDGET_YEAR_CHOICES)
budget = models.IntegerField(blank=True)
finance_description = models.TextField()
project_description = models.TextField()
reference_description = models.CharField(max_length=150)
attachment = models.FileField(blank=True)
date_posted = models.DateTimeField(default=timezone.now())
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.asset_name
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
def save(self, *args, **kwargs):
if not self.budget:
self.budget = self.internal_budget + self.external_budget
return super(Post, self).save(*args, **kwargs)