有没有更好的方法来实现Django管理中的自定义字段集

时间:2018-09-03 06:27:44

标签: django python-3.x django-forms django-admin

我们正在以管理表单添加自定义的字段集,以显示和保存视频信用。

这是我们要添加功能集的地方。

def get_fieldsets(self, request, obj=None):
    fieldsets = super(CreditsAdminMixin, self).get_fieldsets(request, obj=None)
    for category in CreditCategory.objects.all().order_by('name'):
        fields = []
        for field in category.fields.all().order_by('name'):
            field_name = "credit_%s_%s" % (slugify(category.name), slugify(field.name))
            fields.append(field_name)
            self.exclude += (field_name, )
        fieldsets.append((category.name, {'fields': fields}))

    return fieldsets 
  

信贷类别

是每个学分的类别。

  

领域

是用户在其中输入值的每个领域的名称。

示例:enter image description here

下面是呈现上述形式的代码:

def __init__(self, *args, **kwargs):
    super(CreditsFormMixin, self).__init__(*args, **kwargs)
    self.helper_credits = FormHelper()
    self.helper_credits.form_tag = False
    fieldsets = []
    for category in CreditCategory.objects.all():
        fields = []
        for field in category.fields.all():
            field_name = "credit_%s_%s" % (slugify(category.name), slugify(field.name))
            self.credits_keys.append({"key":field_name,"value":field})
            initial = None
            if self.instance.pk:
                try:
                    initial = str(self.instance.credits.get(field=field))
                except Credit.DoesNotExist:
                    pass
                except Credit.MultipleObjectsReturned:
                    pass
            self.fields[field_name] = forms.CharField(label=field.name, initial=initial,max_length=255,
                                                                             required=False, validators=[validate_credit_field])
            fields.append(Field(field_name))
        fieldsets.append(CollapsibleFieldset(category.name, ColumnFields(*fields)))
    self.helper_credits.layout = Layout(*fieldsets)

在这里我们保存积分:

def save_credits(self):
    instance = self.instance

        for field in CreditField.objects.all():
            name = self.cleaned_data["credit_%s_%s" % (slugify(field.category.name), slugify(field.name))]
            if name:
                credit = instance.credits.filter(field=field).first()
                if credit:
                    credit.name = name
                    credit.save()
                else:
                    credit = instance.credits.create(field=field, name=name)

            else:
                instance.credits.filter(field=field).delete()

直到几周前,它仍然可以正常工作。但是,现在,随着每个信用额度的逐渐增加,在保存表格的同时我们会收到502个超时错误。是否有更好的方法来实现平台集。或者在保存它们时出现错误。我可以在那里优化一些东西吗?

0 个答案:

没有答案