簡體   English   中英

如何將初始參數傳遞給django的ModelForm實例?

[英]How to pass initial parameter to django's ModelForm instance?

我的具體情況是這樣的:

我有一個事務模型,包含字段: fromtoForeignKey s to auth.User model)和amount 在我的形式,我想向用戶呈現2個字段填寫: amountfromto將被全自動設置為當前用戶在視圖函數)。

提供ForeignKey默認小部件是一個選擇框。 但是我想要達到的目的是限制user.peers成員的選擇(因此人們只能注冊與他們的同事的交易而不會被所有系統用戶淹沒)。

我試圖將ModelForm更改為:

class AddTransaction(forms.ModelForm):
  from = ModelChoiceField(user.peers)
  amount = forms.CharField(label = 'How much?')

  class Meta:
    model = models.Transaction

但似乎我必須在這里傳遞ModelChoiceField選項的查詢集 - 我無權訪問web request.user對象。

如何將表單中的選項限制為依賴於用戶的選項?

使用以下方法(希望它足夠清楚):

class BackupForm(ModelForm):
    """Form for adding and editing backups."""

    def __init__(self, *args, **kwargs):
        systemid = kwargs.pop('systemid')
        super(BackupForm, self).__init__(*args, **kwargs)
        self.fields['units'] = forms.ModelMultipleChoiceField(
                required=False,
                queryset=Unit.objects.filter(system__id=systemid),
                widget=forms.SelectMultiple(attrs={'title': _("Add unit")}))

    class Meta:
        model = Backup
        exclude = ('system',)

創建這樣的表單:

form_backup = BackupForm(request.POST,
                         instance=Backup,
                         systemid=system.id)
form_backup = BackupForm(initial=form_backup_defaults,
                         systemid=system.id)

希望有所幫助! 如果您需要我深入解釋,請告訴我。

我也遇到了這個問題,這是我的解決方案:

class ChangeEmailForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(ChangeEmailForm, self).__init__(*args, **kwargs)
        self.fields['email'].initial = user.email

    class Meta:
        model = User
        fields = ('email',)

    def save(self, commit=True):
        self.user.email = self.cleaned_data['email']
        if commit:
            self.user.save()
        return self.user

http://www.djangobook.com/en/2.0/chapter07/中 ,“ 設置初始值 ”一節介紹了如何將initial參數用於Form構造函數。 您也可以在派生Form__init__方法中執行額外的操作。

將用戶傳遞到表單的__init__ ,然后調用super(…) 然后將self.fields['from'].querysetuser.peers

暫無
暫無

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

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