Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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中将数据传递给clean方法_Django_Django Models_Django Forms - Fatal编程技术网

如何在Django中将数据传递给clean方法

如何在Django中将数据传递给clean方法,django,django-models,django-forms,Django,Django Models,Django Forms,我正在努力将一个外部参数传递给我的自定义clean方法 除了标识符,我使用表单传递所有内容。标识符来自URL。 除了表单内容之外,我还需要使用标识符 这是我的密码: class Entry(models.Model): identifier = models.ForeignKey(Offer) name = models.CharField(max_length=64) description = models.TextField() class EntryForm(

我正在努力将一个外部参数传递给我的自定义clean方法

除了标识符,我使用表单传递所有内容。标识符来自URL。 除了表单内容之外,我还需要使用标识符

这是我的密码:

class Entry(models.Model):
    identifier = models.ForeignKey(Offer)
    name = models.CharField(max_length=64)
    description = models.TextField()


class EntryForm(ModelForm):
    class Meta:
        model = Entry

    def clean(self):
        try:
            Entry.objects.get(
                identifier=THIS IS WHAT I NEED TO FILL,
                description=self.cleaned_data['description'],
                name=self.cleaned_data['name'])
        raise forms.ValidationError(_(u'We already have an entry with the same credentials!'))
    except Entry.DoesNotExist:
        pass
    return self.cleaned_data
视图:

因此,我缺少可以将标识符添加到clean方法的部分


感谢您在advanced中的帮助

实例化表单时,需要从视图中传入它。通常的模式如下:

class EntryForm(ModelForm):
    def __init__(self, *args, **kwargs):
        self.identifier = kwargs.pop('identifier', None)
        super(EntryForm, self).__init__(*args, **kwargs)

    def clean(self):
        try:
            Entry.objects.get(
                identifier=self.identifier...
并且认为:

if request.method == "POST":
    entryForm = EntryForm(data=request.POST, identifier=identifier)

您必须验证标识符吗?我想不会吧??一种方法是将标识符作为隐藏字段传递到表单中,您可以从已清理的数据中提取该字段。我必须验证标识符,因为这只是演示代码的组合对我来说很重要。我使用的是crispy表单,不知道如何用它创建具有给定参数的隐藏字段。你救了我一天!谢谢您需要将self作为参数添加到init中
if request.method == "POST":
    entryForm = EntryForm(data=request.POST, identifier=identifier)