GVKun编程网logo

django 从基本模型表单继承并添加额外字段(模型字段中不存在)不起作用

23

在本文中,我们将给您介绍关于django从基本模型表单继承并添加额外字段的详细内容,并且为您解答模型字段中不存在不起作用的相关问题,此外,我们还将为您提供关于css–Django样式登录表单并添加额外

在本文中,我们将给您介绍关于django 从基本模型表单继承并添加额外字段的详细内容,并且为您解答模型字段中不存在不起作用的相关问题,此外,我们还将为您提供关于css – Django样式登录表单并添加额外的跨度、Django - 模型表单集 - 前端验证不起作用、Django Blob模型字段、Django 动态模型字段的知识。

本文目录一览:

django 从基本模型表单继承并添加额外字段(模型字段中不存在)不起作用

django 从基本模型表单继承并添加额外字段(模型字段中不存在)不起作用

如何解决django 从基本模型表单继承并添加额外字段(模型字段中不存在)不起作用?

我正在尝试从 BaseModelForm 继承并添加模型字段中不存在的额外字段,但它不起作用。

# forms.py
class BaseConditionForm(forms.ModelForm):

 class Meta:
     model = Condition
     fields = [''nid'',''amount'',''donation'']

class ConditionForm(BaseConditionForm):
 date_type = forms.ChoiceField(choices=ConditionChoices.DATE_TYPE_CHOICES)
 save_type = forms.ChoiceField(choices=ConditionChoices.SAVE_TYPE_CHOICES)

 class Meta(BaseConditionForm.Meta):
     fields = BaseConditionForm.Meta.fields + [''data_type'',''save_type'']

 def __init__(self,*args,**kwargs):
     self.request = kwargs.pop(''request'')
     super().__init__(*args,**kwargs)

 def clean(self):
     cleaned_data = super(ConditionForm,self).clean()
     print(cleaned_data[''cchi''])
     pass

models.py
class Condition(models.Model):
    def __str__(self):
        return str(self.id)  # .zfill(10)

    nid = models.CharField(max_length=10,null=False,blank=False,db_index=True)
    amount = models.IntegerField(null=True,blank=True)
    donation = models.IntegerField(default=0,null=True,blank=True)

但是我遇到了这个错误

.
.
.
  File "/mnt/data/programming/projects/lean/shefa/condition/forms.py",line 74,in <module>
    class ConditionForm(BaseConditionForm):
  File "/mnt/data/programming/projects/lean/shefa/venv/lib/python3.8/site-packages/django/forms/models.py",line 266,in __new__
    raise FieldError(message)
django.core.exceptions.FieldError: UnkNown field(s) (data_type) specified for Condition

如果它不适用,请建议我另一种解决方案。

先谢谢大家。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

css – Django样式登录表单并添加额外的跨度

css – Django样式登录表单并添加额外的跨度

我在形式造型方面有两个问题.

>对于我的登录,我使用Django的默认身份验证功能,并且没有手动编写任何视图或表单.

urls.py

urlpatterns += patterns(
    'django.contrib.auth.views',url(r'^login/$','login',{'template_name':'login.html'},name='qna_login'),url(r'^logout/$','logout',{'next_page':'qna_home'},name='qna_logout'),)

的login.html

{% extends "base.html" %}
{% block content%}
{% if form.errors %}
<p> Your username and/or password didn't match </p>
{% endif%}
<form role="form"method="post" action="{% url 'django.contrib.auth.views.login' %}">
<div>
{% csrf_token %}
{{ form }}
<input type="submit"value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</div>
</form>
{% endblock %}

如何为其添加引导程序样式?

>对于新用户注册,我添加了一些引导程序特定样式,但需要添加额外的跨度并用Glyphicons替换标签.

forms.py

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.Passwordinput())
    class Meta:
        model = User
        fields = ('username','email','password')
    def __init__(self,*args,**kwargs):
        super(UserForm,self).__init__(*args,**kwargs)
        self.fields['username'].widget.attrs.update({'class':'form-control','placeholder':'Username'})
        self.fields['email'].widget.attrs.update({'class':'form-control','placeholder':'Email'})
        self.fields['password'].widget.attrs.update({'class':'form-control','placeholder':'Password'})

我需要做的是替换模板中生成的内容,例如

<p><label for="id_username">Username:</label> <inputid="id_username" maxlength="30" name="username" placeholder="Username" type="text" /> <span>required. 30 characters or fewer. Letters,numbers and @/./+/-/_ characters</span></p>

通过自定义bootstrap插件和glyphicon,如

<div>
            <span><span></span></span>
            <input type="text"placeholder="Username">
        </div>

解决方法

您可以单独渲染每个字段,而不是让Django使用{{form}}渲染整个表单.你可以写这样的模板 –
<form role="form"method="post" action="{% url 'django.contrib.auth.views.login' %}">{% csrf_token %}
    <div>
        {% for field in form %}
            <div>
                <span><span></span></span>
                <inputid="{{ field.id_for_label }}" maxlength="30" name="{{ field.html_name }}" value="{{ field.value }}" type="text" /> 
                {{ field.errors }}
            </div>
        {% endfor %}
        <input type="submit"value="login" />
        <input type="hidden" name="next" value="{{ next }}" />
    </div>
</form>

像往常一样,Django documentation has everything.

Django - 模型表单集 - 前端验证不起作用

Django - 模型表单集 - 前端验证不起作用

如何解决Django - 模型表单集 - 前端验证不起作用?

我正在使用模型表单集。这是我的表格:

class UnloadForm(forms.ModelForm):
    class Meta:
        model = Unload
        fields = ''__all__''

    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.fields[''fieldContract''].queryset = FieldContract.objects.filter(applicativeContract__contract__is_active=True).order_by(''applicativeContract__contract__internal_code'',''applicativeContract__internal_code'',''internal_code'')
        self.fields[''product''].queryset = Product.objects.all().order_by(''name'')


class BaseUnloadFormset(BaseModelFormSet):
    def clean(self):
        super().clean()

        for form in self.forms:
            cd = form.cleaned_data
            whouse = cd[''whouse'']
            company = cd[''company'']
            product = cd[''product'']
            quantity = cd[''quantity'']
            movement_date = cd[''movement_date'']
            helper = StockHelper(product,whouse,company,movement_date)
            if quantity > helper.stock:
                raise ValidationError(f''Attenzione quantità massima disponibile di {product}: {helper.stock}'')
            return cd

UnloadFormSet = modelformset_factory(
    model = Unload,fields = ''__all__'',extra = 5,form = UnloadForm,formset=BaseUnloadFormset
)

class UnloadFormSetHelper(FormHelper):
    def __init__(self,**kwargs)
        self.form_tag = False
        self.layout = Layout(
            Row(
                ''whouse'',''fieldContract'',''company'',''product'',''quantity'',''movement_date'',)
        )
        self.render_required_fields = True

当我在 BaseUnloadFormset 中添加了 clean 方法时,问题就出现了。 由于模型中的所有字段都是必需的,例如不说明运动日期会提示前端验证。 不幸的是,虽然网页的源代码显示该字段实际上是必需的,但忘记移动日期会将表单发送到后端,最终系统会崩溃,因为cleaned_data字典中没有移动日期,从而引发KeyError .

我试图按照文档来覆盖干净的方法: Django Docs on overriding the formset clean method

删除表单中的clean方法,将恢复如下图所示的正确行为:

enter image description here

以防万一,这是我的观点:

def unload(request):
    helper = UnloadFormSetHelper()
    context = {
        ''helper'': helper,''title'': ''Nuovo SCarico'',}
    if request.method == ''GET'':
        formset = UnloadFormSet(queryset=Unload.objects.none())
        load_user_companies_in_formset(request,formset)
        context[''formset''] = formset

    elif request.method == ''POST'':
        formset = UnloadFormSet(request.POST)
        context[''formset''] = formset
        load_user_companies_in_formset(request,formset)
        if formset.is_valid():
            formset.save()
            messages.success(request,''Scarico salvato correttamente'',fail_silently=True)
            return HttpResponseRedirect(reverse(''warehouse:dashboard''))
        else:
            return render(request,''warehouse/unload.html'',context)

    return render(request,context)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Django Blob模型字段

Django Blob模型字段

如何使用Django的ORM和PostgreSQL后端存储二进制数据的“
blob”?是的,我知道Django对这种事情不屑一顾,是的,我知道他们更喜欢您使用ImageField或FileField来表示,但足以说,这对于我的应用程序是不切实际的。

我尝试使用TextField对其进行破解,但是当我的二进制数据未严格确认模型的编码类型(默认情况下为unicode)时,会出现偶尔的错误。例如

psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665

Django 动态模型字段

Django 动态模型字段

我正在开发一个 多租户 应用程序,其中一些用户可以定义自己的数据字段(通过管理员)以收集表单中的其他数据并报告数据。后一点使 JSONField
不是一个很好的选择,所以我有以下解决方案:

class CustomDataField(models.Model):
    """
    Abstract specification for arbitrary data fields.
    Not used for holding data itself,but metadata about the fields.
    """
    site = models.ForeignKey(Site,default=settings.SITE_ID)
    name = models.CharField(max_length=64)

    class Meta:
        abstract = True

class CustomDataValue(models.Model):
    """
    Abstract specification for arbitrary data.
    """
    value = models.CharField(max_length=1024)

    class Meta:
        abstract = True

请注意 CustomDataField 如何具有指向站点的 ForeignKey -
每个站点将具有一组不同的自定义数据字段,但使用相同的数据库。那么各种具体的数据字段可以定义为:

class UserCustomDataField(CustomDataField):
    pass

class UserCustomDataValue(CustomDataValue):
    custom_field = models.ForeignKey(UserCustomDataField)
    user = models.ForeignKey(User,related_name='custom_data')

    class Meta:
        unique_together=(('user','custom_field'),)

这导致以下用途:

custom_field = UserCustomDataField.objects.create(name='zodiac',site=my_site) #probably created in the admin
user = User.objects.create(username='foo')
user_sign = UserCustomDataValue(custom_field=custom_field,user=user,data='Libra')
user.custom_data.add(user_sign) #actually,what does this even do?

但这感觉非常笨拙,尤其是需要手动创建相关数据并将其与具体模型相关联。有更好的方法吗?

已被抢先丢弃的选项:

  • 自定义 SQL 以即时修改表。部分是因为这不会扩展,部分是因为它太过分了。
  • NoSQL 等无模式解决方案。我没有反对他们,但他们仍然不合适。最终这些数据 输入,并且存在使用第三方报告应用程序的可能性。
  • JSONField,如上所述,因为它不适用于查询。

关于django 从基本模型表单继承并添加额外字段模型字段中不存在不起作用的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于css – Django样式登录表单并添加额外的跨度、Django - 模型表单集 - 前端验证不起作用、Django Blob模型字段、Django 动态模型字段的相关信息,请在本站寻找。

本文标签: