【问题标题】:Django forms: set initial valueDjango 表单:设置初始值
【发布时间】:2017-04-04 11:43:00
【问题描述】:

我有一个表格,试图将“当前正在进行”的项目注册到部门。

models.py

class Department(models.Model):
    dept_name = models.CharField(max_length=25)
    address = models.CharField(max_length=50)

class Project(models.Model):
    projectname = models.CharField(max_length=25)
    department = models.ForeignKey(Department, null=True, blank=True, on_delete=models.SET_NULL)

forms.py

class ProjectChoiceField(ModelChoiceField): # return a list of projects for the department form.
    def label_from_instance(self, obj):
        return "%s" % obj.projectname

class SetDepartmentProjectForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(SetDepartmentProjectForm, self).__init__(*args, **kwargs)
        if not self.fields['projectstring']: # no default set
            self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False)
        else:
            project = Project.objects.get(projectname=self.fields['projectstring'])
            self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False, initial=project.pk)

    class Meta:
        model = Department
        fields = ['dept_name', 'address', 'projectstring']

如果没有设置值,这适用于创建下拉项目集,但是当它设置为某个项目名称值时 - 初始 arg (Project.pk) 不会选择正确的项目作为初始值表格。

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以通过设置initial=self.instance.related_fieldname.pk来做到这一点。

    【讨论】:

    • initial=self.instance.related_fieldname 是一个字符串 - 它没有 pk。你的意思是查找相关OtherModel的pk吗? IE。这是小部件用作 ChoiceField 的值吗?
    • 应该是OtherModel的实例吧?
    • OtherModel 选择确实是其他模型的 pk - 但即使我选择正确的 pk 并选择 intial=other_model.pk - 它仍然默认为未选择 --------- ,请参阅我的编辑。
    • 所以在这种情况下你的答案不正确,还有其他问题。
    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 2010-10-23
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多