簡體   English   中英

表格問題 - 設置初始值

[英]Form Problems - Setting Initial Value

我試圖在表單上設置字段的初始值。 該字段不是模型的一部分,但是當我嘗試將其設置為值時,該字段為空。 從我的研究中可能是因為形式是“綁定”,這對我來說是有意義的,但在這種情況下,該字段不是模型的一部分。

我的表格:

#Form for editing profile
class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid, required=False)

該模型:

class Cat(models.Model):
    name = models.CharField(max_length=34,null=False)

從視圖來看,它被稱為:

catform = CatForm(request.POST, pictureid=instance.id)

我期望它將字段設置為初始屬性的值,但事實並非如此。 我試過通過直接添加字符串來測試它,但沒有設置。

這似乎對我有用:

class CatForm(forms.ModelForm):

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid)

我還需要在啟動表單時從調用中刪除“request.POST”。

如果你想在GET請求中渲染pictureid,那么你可以嘗試這樣:

catform = CatForm(initial={'pictureid': instance.id})

對於GET請求,你不需要重寫__init__方法。

但是,如果你想在POST請求中使用Catform ,要在其他地方使用pictureid的值(比如在save方法中),那么你需要在這里覆蓋__init__方法。

class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.pictureid = picid

    def save(self, *args, **kwargs):
        print(self.pictureid)  # if you want to use it in save method
        return super().save(*args, **kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM