我有以下内容,但为什么这不会隐藏书评的标签?我得到错误'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) 关于模型的清理方法,我有两个问题.这是我的例子:
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)
我应该一直打电话给标准清洁方法吗?
cleaned_data=super(AddProfileForm, …Run Code Online (Sandbox Code Playgroud)我有一个问题,当其中一个字段是我的主键时,如何更新我的数据库中的现有行.我正在使用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) 我需要制作一个表单,它有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) 我有一个模型,我排除了两个字段,create_date即created_by字段和字段.现在我在使用该save()方法时出现"Not Null"错误,因为它created_by是空的.
我试图在这样的save()方法之前将用户ID添加到表单:form.cleaned_data['created_by'] = 1和form.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) 好吧,我一直在盯着这几个小时试图弄清楚发生了什么,但没有用.我正在尝试使用'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的新手并且正在努力做一些非常简单的事情.我有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的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) 我有以下模型表单,并希望将自定义验证添加到名为'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 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) django ×10
modelform ×10
django-forms ×3
python ×3
validation ×3
datepicker ×1
hide ×1
label ×1
overriding ×1