Sunday, 25 April 2021

Django - return each model value without field

The Priority model has three values, for each of them values I'm returning an inlineform which allows the user to set a score for each priority & then save with the Project.

This is what it currently looks like: Current view

My problem is: how can I automatically show all the priority values and allow the user to enter the score but not have to pick the Priority. Is it possible to show it like the image below?

What I'm trying to do.

Views.py

class ProjectCreateview(LoginRequiredMixin, CreateView):
    model = Project
    form_class = ProjectCreationForm
    login_url = "/login/"
    success_url = '/'

    def get_context_data(self, **kwargs):

        PriorityChildFormset = inlineformset_factory(
            Project, ProjectPriority, fields=('project', 'priority', 'score'), can_delete=False, extra=Priority.objects.count(),
        )

        data = super().get_context_data(**kwargs)
        if self.request.POST:
            data['priorities'] = PriorityChildFormset(self.request.POST)
        else:
            data['priorities'] = PriorityChildFormset()
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        prioritycriteria = context["priorities"]
        form.instance.creator = self.request.user
        self.object = form.save()
        prioritycriteria.instance = self.object
        if prioritycriteria.is_valid():
            prioritycriteria.save()
        return HttpResponseRedirect(self.get_success_url())

Models.py

class Priority(models.Model):
    title = models.CharField(verbose_name="Priority Name", max_length=250)
    
    def __str__(self):
        return self.title
    
class Project(models.Model):
    name = models.CharField(verbose_name="Name", max_length=100)
    details = models.TextField(verbose_name="Details/Description", blank=False)
    creator = models.ForeignKey(User, on_delete=models.CASCADE)
    
class ProjectPriority(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    priority = models.ForeignKey(Priority, on_delete=models.CASCADE)
    score = models.CharField(max_length=1000, choices=priority_choices)
    
    class Meta:
        verbose_name = "Priority"
        verbose_name_plural = "Priorities"

Template

<table class="table table-light">
  <tbody>
  
    
  </tbody>
</table>


from Django - return each model value without field

No comments:

Post a Comment