Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:在UpdateView中重写get_queryset()_Django_Django Views_Overriding_Modelform - Fatal编程技术网

Django:在UpdateView中重写get_queryset()

Django:在UpdateView中重写get_queryset(),django,django-views,overriding,modelform,Django,Django Views,Overriding,Modelform,项目模式 class Project(models.Model): company = models.ForeignKey('projects.Company', on_delete=models.PROTECT, related_name='projects') title = models.CharField('Project title', max_length=128) start_date = models.DateField('Project start d

项目模式

class Project(models.Model):
    company = models.ForeignKey('projects.Company', on_delete=models.PROTECT, related_name='projects')

    title = models.CharField('Project title', max_length=128)
    start_date = models.DateField('Project start date', blank=True, null=True)
    end_date = models.DateField('Project end date', blank=True, null=True)

    estimated_design = models.DecimalField('Estimated design hours', max_digits=5, decimal_places=1,
                                           validators=[MinValueValidator(Decimal('0.01'))])
    actual_design = models.DecimalField('Actual design hours', default=0, decimal_places=1, max_digits=5,
                                        validators=[MinValueValidator(Decimal('0.01'))])

    estimated_development = models.DecimalField('Estimated development hours', max_digits=5, decimal_places=1,
                                                validators=[MinValueValidator(Decimal('0.01'))])
    actual_development = models.DecimalField('Actual development hours', default=0, decimal_places=1, max_digits=5,
                                             validators=[MinValueValidator(Decimal('0.01'))])

    estimated_testing = models.DecimalField('Estimated testing hours', max_digits=5, decimal_places=1,
                                            validators=[MinValueValidator(Decimal('0.01'))])
    actual_testing = models.DecimalField('Actual testing hours', default=0, decimal_places=1, max_digits=5,
                                         validators=[MinValueValidator(Decimal('0.01'))])

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('project-update', kwargs={'pk': self.pk, 'slug': slugify(self.title)})

    @property
    def has_ended(self):
        return self.end_date is not None and self.end_date < timezone.now().date()

    @property
    def total_estimated_hours(self):
        return self.estimated_design + self.estimated_development + self.estimated_testing

    @property
    def total_actual_hours(self):
        return self.actual_design + self.actual_development + self.actual_testing

    @property
    def is_over_budget(self):
        return self.total_actual_hours > self.total_estimated_hours
我的UpdateView类

class ProjectForm(ModelForm):

    class Meta:
        model = Project
        fields = ['actual_design', 'actual_development', 'actual_testing']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'UPDATE'))
class ProjectUpdateView(LoginRequiredMixin, UpdateView):
    model = Project
    form_class = ProjectForm
    success_url = reverse_lazy('dashboard')

目前,我的ProjectUpdateView类正在替换十进制值​​在my ProjectForm类中指示。我应该增加这些数值​​按表格上的数字填写,不得替换。据我所知,这可以通过重写ProjectUpdateView类中的get_queryset()来实现。具体如何实现这一点?

为了增加值,您可以在
x+F('field\u name')
时替换值
x
,您可以通过覆盖
form\u valid
方法来实现:

from django.db.models import F

class ProjectUpdateView(LoginRequiredMixin, UpdateView):
    model = Project
    form_class = ProjectForm
    success_url = reverse_lazy('dashboard')

    def form_valid(self, form):
        form.instance.actual_design += F('actual_design')
        form.instance.actual_development += F('actual_development')
        form.instance.actual_testing += F('actual_testing')
        return super().form_valid(form)
从django.db.models导入F
类ProjectUpdateView(LoginRequiredMixin,UpdateView):
模型=项目
form\u class=ProjectForm
success\u url=reverse\u lazy(“仪表板”)
def表单_有效(自身、表单):
form.instance.actual_design+=F(“actual_design”)
form.instance.actual\u development+=F(“actual\u development”)
form.instance.actual_testing+=F(“actual_testing”)
return super().form\u有效(form)