Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
如何根据FK字段验证Django表单字段_Django_Validation_Forms - Fatal编程技术网

如何根据FK字段验证Django表单字段

如何根据FK字段验证Django表单字段,django,validation,forms,Django,Validation,Forms,我试图创建一个验证规则,如果(里程碑)对象的目标日期大于项目的目标日期,则该规则会传递一个错误。问题是没有任何错误被提出 为了简单起见 models.py class Project(models.Model): target_date = models.DateField() class Milestone(models.Model): project = models.ForeignKey(Project) target_date = models.DateFiel

我试图创建一个验证规则,如果(里程碑)对象的目标日期大于项目的目标日期,则该规则会传递一个错误。问题是没有任何错误被提出

为了简单起见

models.py

class Project(models.Model):
    target_date = models.DateField()

class Milestone(models.Model):
    project = models.ForeignKey(Project)
    target_date = models.DateField()
Forms.py

class MilestoneAddForm(forms.ModelForm):

    class Meta:
        model = Milestone

    def clean_target_date(self):
        tdate = self.cleaned_data['target_date']
        if tdate > self.instance.project.target_date
            raise forms.ValidationError("Target Date is outside or project target date.")
        return tdate
py(删除的无关代码)


这应该行得通。有关更改内容的更多信息,请参阅内联注释

def clean_target_date(self):
    #                 V-- typo (cleand_data => cleaned_data)
    tdate = self.cleaned_data['target_date']
    project = self.instance.project
    # project allows for nulls, so check that first.
    if project is None:
        raise forms.ValidationError("There's no project associated with this milestone.")
    #                   V-- Do an attribute lookup, don't use the query lookup syntax
    if tdate > project.target_date:
        raise forms.ValidationError("Target Date is outside or project target date.")
    return tdate

确切的错误是什么?请您提供实际运行的代码(上面至少有两个语法错误)。@Dronestudios:您确定target_date大于项目的target_date吗?如果调试到它会发生什么?在django还是一个相对较新的版本,而我的调试foo目前很弱。我很可能需要一点时间才能弄清楚到底发生了什么。似乎没有调用此代码。可能是这样,请尝试在
cleaned\u target\u date
的开头添加
raise
。如果没有看到异常,则不会调用它。如果发生这种情况,请使用您的
里程碑
模型定义更新您的问题。是的,看起来即使这样做也不会发生。这可能是因为使用了表单集吗?添加了视图。是的,它在我的标准表单上工作。表单集肯定有不同之处。
def clean_target_date(self):
    #                 V-- typo (cleand_data => cleaned_data)
    tdate = self.cleaned_data['target_date']
    project = self.instance.project
    # project allows for nulls, so check that first.
    if project is None:
        raise forms.ValidationError("There's no project associated with this milestone.")
    #                   V-- Do an attribute lookup, don't use the query lookup syntax
    if tdate > project.target_date:
        raise forms.ValidationError("Target Date is outside or project target date.")
    return tdate