Django 初始化外键下拉列表
我想在我的一个表单中填充两个外键字段。相关代码位如下所示:Django 初始化外键下拉列表,django,forms,initialization,Django,Forms,Initialization,我想在我的一个表单中填充两个外键字段。相关代码位如下所示: if request.method == 'POST': form = IssuesForm(request.POST or None) if request.method == 'POST' and form.is_valid(): form.save() else: form = IssuesForm(initial={'vehicle': stock_number, 'addedBy': r
if request.method == 'POST':
form = IssuesForm(request.POST or None)
if request.method == 'POST' and form.is_valid():
form.save()
else:
form = IssuesForm(initial={'vehicle': stock_number, 'addedBy': request.user, })
车辆
指向车辆
类别<代码>由添加以包含当前登录的用户
但是,下拉列表没有按我所希望的那样初始化…我仍然必须选择车辆和用户。由此,我有两个问题:
IssueForm
类如下所示:
class Issues(models.Model):
vehicle = models.ForeignKey(Vehicle)
description = models.CharField('Issue Description', max_length=30,)
type = models.CharField(max_length=10, default='Other', choices=ISSUE_CHOICES)
status = models.CharField(max_length=12, default='Pending',
choices=ISSUE_STATUS_CHOICES)
priority = models.IntegerField(default='8', editable=False)
addedBy = models.ForeignKey(User, related_name='added_by')
assignedTo = models.CharField(max_length=30, default='Unassigned')
dateTimeAdded = models.DateTimeField('Added On', default=datetime.today,
editable=False)
def __unicode__(self):
return self.description
形式类
class IssuesForm(ModelForm):
class Meta:
model = Issues
exclude = ('assignedTo')
对于第二个问题,是否要将addedBy字段设置为只读?如果是这样,不要将其添加到表单中(如果您将其呈现给用户,它将永远不会是只读的,例如Firebug)。您可以在save方法中填充它
if request.method == 'POST':
form = IssuesForm(request.POST or None)
if request.method == 'POST' and form.is_valid():
issue = form.save(commit=False)
issue.addedBy = request.user
# any other read only data goes here
issue.save()
else:
form = IssuesForm(initial={'vehicle': stock_number}) # this is related to your first question, which I'm not sure about until seeing the form code
要使窗体成为只读:在窗体类上,覆盖_init__方法以禁用html字段:
def __init__(self, *args, **kwargs):
super(IssuesForm, self).__init__(*args, **kwargs)
for key in self.fields.keys():
self.fields[key].widget.attrs = {'disabled': 'disabled'}
确保您也不会侦听POST请求,如果是,请不要保存表单。
您可以进一步自定义uuu init_uuu方法,以便在调用super方法后获取一些参数并将字段设置为这些值。能否也显示您的
IssuesForm
类?您应该尝试为其他字段之一传递初始数据,例如description。如果它被填充,我可以想象问题源于通过车辆的pk,而不是车辆对象本身。您添加了模型,不是表单类。@Dmitry:我的错…对不起…我昨天有点困惑:)我在想“车辆”:库存号会初始化车辆外键条目request.method检查太多,如果您使用(request.POST或None)初始化表单,那么您需要做的就是检查是否有效(),因为未绑定表单(如果POST为None)没有错误@Dmitry:我只是看到了很多检查…我正在浏览我为同一功能制作的旧应用程序的代码…通知的thnx是的,我甚至没有注意到多方法检查。