标签: modelform

Django:如何使用ModelForm隐藏/覆盖默认标签?

我有以下内容,但为什么这不会隐藏书评的标签?我得到错误'textfield'没有定义:

from django.db import models
from django.forms import ModelForm, Textarea

class Booklog(models.Model):
    Author = models.ForeignKey(Author)
    Book_comment = models.TextField()
    Bookcomment_date = models.DateTimeField(auto_now=True)

class BooklogForm(ModelForm):
    #book_comment = TextField(label='')

    class Meta:
        model = Booklog
        exclude = ('Author')
        widgets = {'book_entry': Textarea(attrs={'cols': 45, 'rows': 5}, label={''}),}  
Run Code Online (Sandbox Code Playgroud)

python django label hide modelform

14
推荐指数
3
解决办法
3万
查看次数

modelform:覆盖clean方法

关于模型的清理方法,我有两个问题.这是我的例子:

class AddProfileForm(ModelForm):
        ...
        password = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}))
        password_verify = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}), label='Retype password')
        ...

        class Meta:
            model = UserModel
            fields=("username", "password", "password_verify", "first_name", "last_name", "date_of_birth", "biography", "contacts", )

        #called on validation of the form
        def clean(self):
            #run the standard clean method first
            cleaned_data=super(AddProfileForm, self).clean()
            password = cleaned_data.get("password")
            password_verify = cleaned_data.get("password_verify")

            #check if passwords are entered and match
            if password and password_verify and password==password_verify:
                print "pwd ok"
            else:
                raise forms.ValidationError("Passwords do not match!")

            #always return the cleaned data
            return cleaned_data
Run Code Online (Sandbox Code Playgroud)
  1. 我应该一直打电话给标准清洁方法吗?

    cleaned_data=super(AddProfileForm, …
    Run Code Online (Sandbox Code Playgroud)

django overriding modelform data-cleaning

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

使用ModelForms时如何更新现有行?

我有一个问题,当其中一个字段是我的主键时,如何更新我的数据库中的现有行.我正在使用ModelForm和Django-Piston - 我的主要目标是将RESTful Post发送到我的webservice.我能够正确发送初始帖子(即主键值尚不存在).问题是当我想更新主键已经存在的值时 - 当我发出f.is_valid()时,它失败,因为"此UniqueIdentifier已经存在".如何使用ModelForms更新现有行进行表单验证?

我的models.py:

from django.db import models
class DeviceModel(models.Model):
    uniqueIdentifier = models.CharField(primary_key=True, max_length=100)
    deviceToken = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

forms.py

from django import forms
from models import DeviceModel
class DeviceModelForm(forms.ModelForm):
    class Meta:
        model = DeviceModel
Run Code Online (Sandbox Code Playgroud)

handlers.py

class DeviceHandler(BaseHandler):
allowed_methods = ('POST', 'GET', 'DELETE',)
def create(self, request):
    f = DeviceModelForm(request.POST)
    if f.is_valid():
        new_object = f.save()
        return new_object
    return rc.BAD_REQUEST
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls.defaults import *
from piston.resource import Resource
from api.handlers import DeviceHandler

device_handler = Resource(DeviceHandler)

urlpatterns = patterns('',
    (r'^api/$', device_handler, …
Run Code Online (Sandbox Code Playgroud)

python django modelform django-piston

12
推荐指数
3
解决办法
8824
查看次数

字段选择()作为查询集?

我需要制作一个表单,它有1个选择和1个文本输入.必须从数据库中选择.模型看起来像这样:

class Province(models.Model):
    name = models.CharField(max_length=30)
    slug = models.SlugField(max_length=30)

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

它的行只由admin添加,但所有用户都可以在表单中看到它.我想从那里制作一个ModelForm.我做了这样的事情:

class ProvinceForm(ModelForm):
    class Meta:
        CHOICES = Province.objects.all()

        model = Province
        fields = ('name',)
        widgets = {
            'name': Select(choices=CHOICES),
        }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.select标签不会以html格式显示.我错了什么?

更新:

这个解决方案可以正常工作:

class ProvinceForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProvinceForm, self).__init__(*args, **kwargs)
        user_provinces = UserProvince.objects.select_related().filter(user__exact=self.instance.id).values_list('province')
        self.fields['name'].queryset = Province.objects.exclude(id__in=user_provinces).only('id', 'name')

    name = forms.ModelChoiceField(queryset=None, empty_label=None)

    class Meta:
        model = Province
        fields = ('name',)
Run Code Online (Sandbox Code Playgroud)

django modelform

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

Django,将已排除的属性添加到提交的模型中

我有一个模型,我排除了两个字段,create_datecreated_by字段和字段.现在我在使用该save()方法时出现"Not Null"错误,因为它created_by是空的.

我试图在这样的save()方法之前将用户ID添加到表单:form.cleaned_data['created_by'] = 1form.cleaned_data['created_by_id'] = 1.但这一切都不起作用.

有人可以向我解释我如何"添加"其他东西到提交的模型中,以便它可以节省吗?

class Location(models.Model):
    name = models.CharField(max_length = 100)
    created_by = models.ForeignKey(User)
    create_date = models.DateTimeField(auto_now=True)

class LocationForm(forms.ModelForm):
    class Meta:
        model = Location
        exclude = ('created_by', 'create_date', )
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms modelform

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

Django ModelForm验证失败,没有错误

好吧,我一直在盯着这几个小时试图弄清楚发生了什么,但没有用.我正在尝试使用'instance'关键字创建一个ModelForm,以将其传递给现有的模型实例,然后保存它.这是ModelForm(在我尝试确定此问题的原因时,从原始版本中剥离了很多):

class TempRuleFieldForm(ModelForm):
    class Meta:
        model = RuleField
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的代码:

>>> m = RuleField.objects.get(pk=1)
>>> f = TempRuleFieldForm(instance=m)
>>> f.is_valid()
False
Run Code Online (Sandbox Code Playgroud)

模型对象(m上面)是有效的,它保存得很好,但表单不会验证.现在,据我所知,这段代码与这里的Django文档示例完全相同:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method,尽管很明显我错过了什么.我非常感谢一些新鲜的眼睛告诉我我的错误.

谢谢

django validation modelform

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

django:在同一页面中输入并显示输出

我是django的新手并且正在努力做一些非常简单的事情.我有ModelForm以下型号:

class Queries(models.Model):
    user_id=models.CharField(max_length=200)
    query=models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

我向用户展示了一个简单的表单,有助于执行以下操作:

  • 用户会问一个问题
  • 将处理该问题(将根据问题生成数据库查询)

  • 然后查询结果应显示在同一页面中的表单下方.

这就是我的views.py的样子:

from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from basicapp.models import QueryForm

def index(request):
    form=MyForm()
    real_form=form.getForm(request)
    response=form.response
    return render(request,'basicapp/index.html',{
        'form': real_form,
        'response':response,
    })
class MyForm:
    response=''
    def getForm(self,request):
        form = QueryForm(request.POST)
        if form.is_valid():
            response=form.cleaned_data['query']
            form.save()
        return form
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试简单的东西,我在表单的查询字段中获取值并尝试将其发送回页面;到目前为止,我失败了.这是index.html:

<form action=" " method="post">{% csrf_token %}
{{ form }}
<p>{{response}}</p>
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

如果我能做到这一点,我认为查询的东西不会那么艰难.表单工作正常,数据被保存在数据库中.只有response从字符串views.py无法检索内部index.html表单提交后.你能帮忙吗?

编辑:index.html基于霍夫的回答尝试跟进:

<form id="myForm" action=" " …
Run Code Online (Sandbox Code Playgroud)

django django-forms modelform

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

为什么Django不强制我的unique_together约束作为form.ValidationError而不是抛出异常?

编辑:虽然这篇文章是Django的ModelForm unique_together验证的副本,但是从ModelForm中删除'exclude'的接受答案是比其他问题中接受的答案更清晰的解决方案.

这是这个问题的后续行动.

如果我没有显式检查clean_title()函数中的unique_together约束,则django会抛出异常:

/ journal/journal/4中的IntegrityError

重复键值违反唯一约束"journal_journal_owner_id_key"

请求方法:POST

请求URL: http:// localhost:8000/journal/journal/4

异常类型:IntegrityError

异常值:重复键值违反唯一约束"journal_journal_owner_id_key"

例外位置:/Library/Python/2.6/site-packages/django/db/backends/util.py执行,第19行

但是我的印象是Django会通过引发ValidationError很好地强制执行这个约束,而不是我需要捕获的异常.

下面是我的代码,附带了一个额外的clean_title()方法,我将其用作解决方法.但我想知道我做错了什么,以致django没有以预期的方式强制执行约束.

谢谢.

型号代码:

class Journal (models.Model):
    owner = models.ForeignKey(User, related_name='journals')
    title = models.CharField(null=False, max_length=256)
    published = models.BooleanField(default=False)

    class Meta:
        unique_together = ("owner", "title")

    def __unicode__(self):
        return self.title 
Run Code Online (Sandbox Code Playgroud)

表格代码:

class JournalForm (ModelForm):
    class Meta:
        model = models.Journal
        exclude = ('owner',)

    html_input = forms.CharField(label=u'Journal Content:', widget=TinyMCE(attrs={'cols':'85', 'rows':'40'}, ), )

    def clean_title(self):
        title = self.cleaned_data['title']
        if self.instance.id:
            if models.Journal.objects.filter(owner=self.instance.owner, title=title).exclude(id=self.instance.id).count() > 0:
               raise forms.ValidationError(u'You …
Run Code Online (Sandbox Code Playgroud)

django validation django-forms modelform

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

Django ModelForm自定义验证:如何访问提交的字段值

我有以下模型表单,并希望将自定义验证添加到名为'billable_work'的字段中.

如何访问表单中提交的字段"项目"?我想检查项目的值(以下示例中的'p'),但无法找到正确的语法,以便我可以测试提交的值.任何帮助,将不胜感激.

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entries
        exclude = ('billable_work','notes')  

    billable_work = forms.BooleanField()
    notes = forms.CharField(widget=forms.Textarea,required=False)

    def clean_billable_work(self):
        b = self.cleaned_data['billable_work']
        p = form.fields['project']

        if b == True and p == 523:
            raise forms.ValidationError(_("Entries cannot be both billable and NONE: Indirect."))
        return self.cleaned_data['billable_work']
Run Code Online (Sandbox Code Playgroud)

django validation modelform

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

如何在 django 的 ModelForm 中使用 DatePicker?

我正在使用 django 3.0,我试图在我的 ModelForm 中显示一个日期选择器小部件,但我不知道如何(我能得到的只是文本字段)。我尝试寻找一些解决方案,但找不到任何解决方案。这就是我的模型和 ModelForm 的样子:

class Membership(models.Model):
  start_date = models.DateField(default=datetime.today, null=True)
  owner = models.ForeignKey(Client, on_delete=models.CASCADE, null=True)
  type = models.ForeignKey(MembershipType, on_delete=models.CASCADE, null=True)

class MembershipForm(ModelForm):
  class Meta:
    model = Membership
    fields = ['owner', 'start_date', 'type']
    widgets = {
        'start_date': forms.DateInput
    }
Run Code Online (Sandbox Code Playgroud)

这是我的 html:

<form class="container" action="" method="POST">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

python django datepicker modelform

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