ken*_*der 20 python django django-models django-forms
我的具体情况是这样的:
我有一个交易模式,与字段:from
,to
(均为ForeignKey
s到auth.User
模型)和amount
.在我的表单中,我想呈现用户2个字段以填写:amount
和from
(to
将在视图函数中自动设置为当前用户).
显示a的默认小部件ForeignKey
是一个选择框.但是我想要达到的目的是限制对查询集user.peers
成员的选择(因此人们只能向他们的同伴注册事务并且不会被所有系统用户充斥).
我试图将ModelForm更改为:
class AddTransaction(forms.ModelForm):
from = ModelChoiceField(user.peers)
amount = forms.CharField(label = 'How much?')
class Meta:
model = models.Transaction
Run Code Online (Sandbox Code Playgroud)
但似乎我必须在这里传递选择的查询集ModelChoiceField
- 我无法访问Web request.user
对象.
如何将表单中的选项限制为依赖于用户的选项?
lem*_*nad 31
使用以下方法(希望它足够清楚):
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',)
Run Code Online (Sandbox Code Playgroud)
创建这样的表单:
form_backup = BackupForm(request.POST,
instance=Backup,
systemid=system.id)
form_backup = BackupForm(initial=form_backup_defaults,
systemid=system.id)
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!如果您需要我深入解释,请告诉我.
我也遇到了这个问题,这是我的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26073 次 |
最近记录: |