相关疑难解决方法(0)

你会如何在Django中制作动态的formset?

这是我做的方式:

{{ formset.management_form }}
<table>
    {% for form in formset.forms %}
        {{ form }}
    {% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>   
Run Code Online (Sandbox Code Playgroud)

这是JS:

var form_count = {{formset.total_form_count}};
$('#add_form').click(function() {
    form_count++;
    var form = '{{formset.empty_form|escapejs}}'.replace(/__prefix__/g, form_count);
    $('#forms').append(form)
    $('#id_form-TOTAL_FORMS').val(form_count);
});
Run Code Online (Sandbox Code Playgroud)

特别困扰我的是我必须自己编写escapejs模板标签.它只是删除所有换行符并转义任何单引号,这样它就不会弄乱我的字符串.但Django制造商到底希望我们在这种情况下做些什么呢?为什么他们有这个TOTAL_FORMS隐藏的领域,当他们刚刚使用了一个数组<input name="my_form_field[0]" />然后计算它的长度?

javascript django formsets

18
推荐指数
1
解决办法
2万
查看次数

Django:如何在构造后为formset添加额外的表单?

这大致是我正在尝试做的事情:

def post(request):
    VehicleFormSet = formset_factory(StaffVehicleForm)
    if request.method == 'POST':
        vehicle_formset = VehicleFormSet(request.POST)
        if 'add_vehicle' in request.POST:
            if vehicle_formset.is_valid():
                form_count = vehicle_formset.total_form_count()
                vehicle_formset.forms.append(vehicle_formset._construct_form(form_count))
Run Code Online (Sandbox Code Playgroud)

基本上,如果用户单击"添加"按钮并且其条目有效,我想在表单集中添加另一个空白表单,并隐藏前一个表单.

上面代码的问题是我无法弄清楚如何增加total_form_count().我现在拥有它的方式,它将工作一次,然后如果你再次按下它,什么都不会发生,大概是因为form_count是相同的.我也不喜欢打电话_construct_form和依靠内部.

django django-forms

17
推荐指数
1
解决办法
9500
查看次数

使用WTForms FieldList

我通过Flask.WTF扩展使用带有Flask的WTForms.不过,这个问题不是Flask特有的.

WTForms包括FieldList字段列表的字段.我想用它来制作一个用户可以添加或删除项目的表单.这将需要某种Ajax框架来动态添加小部件,但WTForms文档没有提及它.

Deform这样的其他框架也支持Ajax.WTForms是否有类似的框架?

python forms ajax flask wtforms

12
推荐指数
1
解决办法
8615
查看次数

如何处理formset中无效的已删除表单

如果用户不完整填写formset中的表单然后将其标记为删除,我的表单处理可怕地死亡.删除的表单会阻止formset.cleaned_data工作,因为它们不验证,因此表单没有cleaning_data属性.如果我尝试迭代formset.deleted_forms并从formset.forms中删除表单,则formset.cleaned_data会因索引超出范围而崩溃.

我应该如何处理用户不想要的这些无效表​​单?

(这是我的错误,我从谷歌小组复制了描述)

我不明白错误,因为查看django代码我可以读到这个:

def is_valid(self):
    """
    Returns True if form.errors is empty for every form in self.forms.
    """
    if not self.is_bound:
        return False
    # We loop over every form.errors here rather than short circuiting on the
    # first failure to make sure validation gets triggered for every form.
    forms_valid = True
    err = self.errors
    for i in range(0, self.total_form_count()):
        form = self.forms[i]
        if self.can_delete:                           <-------
            if self._should_delete_form(form):
                # This form is going to be deleted so any …
Run Code Online (Sandbox Code Playgroud)

django django-forms

7
推荐指数
1
解决办法
1602
查看次数

从模型formset django动态删除表单

我有一个网页,用户可以动态添加和删除表单到django formsets.

我已经阅读了使用Ajax动态地将表单添加到Django formset,基于此我可以动态地将表单添加到formset.现在我想动态删除formset.我在Django中查看了动态删除内联表单集

我想要这样做的方法是当用户点击删除时,我有一个ajax函数,它从数据库中删除表单实例记录.当我的ajax函数返回时,我保持相同的total_form_count和initial_form_count,只隐藏表单html,以便在我的POST中提交已删除的记录.

最初,formset将其表单元素呈现为:

#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">
Run Code Online (Sandbox Code Playgroud)

现在假设我在删除记录后动态删除表单0,使用ajax,我不更改表单计数,因此total_form_count和initial_form_count为3.

(如果我在这种情况下将total_form_count和initial_form_count减少为2,当我在视图中使用POST数据填充formset时,它应该以form0和form1的形式排序.但在我的情况下,有效的表单是form1和form2)

现在在我看来,我做了类似以下的事情来保存我的表格.

myformset = modelformset_factory(ObjectElement,form=Object_Form, extra=0, can_delete=True)
for form in myformset.forms:
    print(form.instance.id) #this does not print id of deleted record, but of the first existing record in the database.
    print(form.instance.attribute)# this prints …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

7
推荐指数
1
解决办法
7474
查看次数

如何在 Django 中制作主从模型/屏幕?

我总是冲突的一件事是如何使用 Django 实现主从应用程序。典型的例子是 Invoice 和 InvoiceLines。

要讨论的事情是:

  • 如何构建用于保存、加载等主模型和详细模型的代码
  • 视图:文件和模板、详细信息行模板、如何动态添加
  • 自动计算字段(如父行的总计),此代码在哪里?

编辑/添加:

关于自动计算字段,这是我的第一个解决方案,http://pastebin.com/ZGqNnHuC,在模型的保存方法中不是更好吗?

主模型需要来自详细模型的值。(即首先需要计算每个细节的总计,保存每一行,然后求和并保存主数据)它是如何以比调用calculate()方法更Django的方式制作的?

django django-templates django-models

7
推荐指数
1
解决办法
7006
查看次数

在 django 表单集中动态添加行

在我的 django 应用程序中,我有两个模型,即PlayerTeam,它们通过多对多关系连接。要在我的表格中动态添加数据,我想使用 javascript 在我的表单中添加Add rowRemove Row按钮,但无法这样做。

详细信息如下:

模型.py

class Player(models.Model):
    pname = models.CharField(max_length=50)
    hscore = models.IntegerField()
    age = models.IntegerField()

    def __str__(self):
       return self.pname

class Team(models.Model):
    tname = models.CharField(max_length=100)
    player= models.ManyToManyField(Player)

    def __str__(self):
        return self.tname
Run Code Online (Sandbox Code Playgroud)

表格.py

class PlayerForm(forms.Form):
    pname = forms.CharField()
    hscore= forms.IntegerField()
    age = forms.IntegerField()

PlayerFormset= formset_factory(PlayerForm)

class TeamForm(forms.Form):
   tname= forms.CharField()
   player= PlayerFormset()
Run Code Online (Sandbox Code Playgroud)

视图.py

def post(request):

   if request.POST:
        form = TeamForm(request.POST)
        form.player_instances = PlayerFormset(request.POST)
        if form.is_valid():
            team= Team()
            team.tname= form.cleaned_data['tname']
            team.save() …
Run Code Online (Sandbox Code Playgroud)

javascript python django django-forms formset

7
推荐指数
1
解决办法
5736
查看次数

django脆皮形式的内联形式

我正在尝试采用crispy-forms和bootstrap,尽可能多地使用它们的功能,而不是一遍又一遍地发明一些东西.

有没有办法使用像django-admin表单那样的crispy-forms/bootstrap具有内联表单功能?

这是一个例子:

class NewProjectForm(forms.Form):
    name = forms.CharField(required=True, label=_(u'???????? ???????'), widget=forms.TextInput(attrs={'class':'input-block-level'}))
    group = forms.ModelChoiceField(required=False, queryset=Group.objects.all(), label=_(u'?????? ????????'), widget=forms.Select(attrs={'class':'input-block-level'}))
    description = forms.CharField(required=False, label=_(u'???????? ???????'), widget=forms.Textarea(attrs={'class':'input-block-level'}))

    class Meta:
        model = Project
        fields = ('name','description','group')

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_class = 'horizontal-form'
        self.helper.form_action = 'submit_new_project'
        self.helper.layout = Layout(
            Field('name', css_class='input-block-level'),
            Field('group', css_class='input-block-level'),
            Field('description',css_class='input-block-level'),
        )
        self.helper.add_input(Submit('submit',_(u'??????? ??????')))
        self.helper.add_input(Submit('cancel',_(u'? ?????????')))
        super(NewProjectForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

它会显示一个体面的形式:

使用香脆形式呈现的单个表单的示例

如何添加基本代表此模型的表单:

class Link(models.Model):
    name = models.CharField(max_length=255, blank=False, null=False, verbose_name=_(u'????????'))
    url = models.URLField(blank=False, null=False, verbose_name=_(u'??????'))
    project = models.ForeignKey('Project')
Run Code Online (Sandbox Code Playgroud)

因此会有一个项目和名称/网址链接以及添加许多内容的方式,就像在django-admin中完成相同的事情一样,您可以使用与主模型相关的数据添加额外的"行".在下面的sreenshot中,您可以填写"问题"对象和下面的数据,您可以为QuestionOption对象添加数据 …

django django-forms django-crispy-forms

5
推荐指数
1
解决办法
8696
查看次数

jquery克隆html问题,更新DOM?

我需要javascript/jquery专家帮助解决下一个问题:

---- 1. 此javascript警告select html标记中所选选项的ID:

$(function(){
    $("#id_productos_list").change(
    function(){
        var op = $(this).selectedValues()
        alert(op);
     }
     );
});
Run Code Online (Sandbox Code Playgroud)

---- 2.这个javascript克隆html代码:

function cloneMore(selector, type) {
    var newElement = $(selector).clone();
    var total = $('#id_' + type + '-TOTAL_FORMS').val();

    newElement.find(':input').each(function() {
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;
        $(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });

    total++; …
Run Code Online (Sandbox Code Playgroud)

html django jquery javascript-events drop-down-menu

2
推荐指数
2
解决办法
4037
查看次数

多个文件上传django

我知道如何在djnago中多文件上传.我用:

<form enctype="multipart/form-data" action="" method="post">
    {% csrf_token %}
    <p>Press control to upload more than image at same time</p>
    <input type="file" name="myfiles" multiple>
    <input type="submit" name="upload" value="Upload">
</form>
Run Code Online (Sandbox Code Playgroud)

但我想要的是单个文件上传,但允许用户点击"+"按钮并自动创建新的文件上传,允许用户上传多个文件.喜欢在hotmail中附加文件.

python django django-forms multifile-uploader

1
推荐指数
1
解决办法
2743
查看次数