我正在构建支持票据跟踪应用程序,并且我想从一个页面创建一些模型.门票通过ForeignKey属于客户.Notes也通过ForeignKey属于Tickets.我想选择一个客户(这是一个完整的单独项目)或创建一个新客户,然后创建一个Ticket,最后创建一个分配给新票证的Note.
由于我是Django的新手,我倾向于迭代工作,每次尝试新功能.我玩过ModelForms,但我想隐藏一些字段并进行一些复杂的验证.看起来我正在寻找的控制级别要么需要使用formset,要么手工完成所有操作,完成一个繁琐的手工编码模板页面,我试图避免.
我有什么可爱的功能吗?有人使用formset有一个很好的参考或示例吗?我为他们花了整整一个周末的API文档,我仍然无能为力.如果我分解并手工编写所有内容,这是一个设计问题吗?
我正在使用django-registration和django-profile来处理注册和配置文件.我想在注册时为用户创建个人资料.我创建了一个自定义注册表单,并使用以下教程将其添加到urls.py:
本教程中的基本思想是覆盖默认注册表单以同时创建配置文件.
forms.py - 在我的个人资料应用中
from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
from profiles.models import UserProfile
from registration.models import RegistrationProfile
attrs_dict = { 'class': 'required' }
class UserRegistrationForm(RegistrationForm):
city = forms.CharField(widget=forms.TextInput(attrs=attrs_dict))
def save(self, profile_callback=None):
new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
password=self.cleaned_data['password1'],
email=self.cleaned_data['email'])
new_profile = UserProfile(user=new_user, city=self.cleaned_data['city'])
new_profile.save()
return new_user
Run Code Online (Sandbox Code Playgroud)
在urls.py中
from profiles.forms import UserRegistrationForm
Run Code Online (Sandbox Code Playgroud)
和
url(r'^register/$',
register,
{'backend': 'registration.backends.default.DefaultBackend', 'form_class' : UserRegistrationForm},
name='registration_register'),
Run Code Online (Sandbox Code Playgroud)
显示表单,我可以在City中输入,但不会在DB中保存或创建条目.
我想要做的是在一个页面中管理多个表单,我知道有表单集,我知道表单管理是如何工作的,但是我遇到了一些问题.
只是为了帮助你想象我的问题是什么我将使用django示例模型:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField()
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
现在,想象一下我已经制作了表格条款:
from django import forms
from mysite.polls.models import Poll, Choice
class PollForm(forms.ModelForm):
class Meta:
model = Poll
class ChoiceForm(forms.ModelForm):
class Meta:
model = Choice
exclude = ('poll',)
Run Code Online (Sandbox Code Playgroud)
所以我想要做的是在一个页面中有几个Poll和Choice模型的表单实例,但是请注意这些模型也可以重复:
<form action="{{url}}" method="post">
{{pollform}}
{{choiceform}}
{{pollform}}
</form>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,有两个Poll表单和一个Choice表单,但Poll表单由Choice表单分隔.我确实需要表单在页面中保持顺序,因此使用表单集要困难一些.
我得到的问题是,帖子中的值都是名称"answer",所以我得到了所有表单中所有元素的列表,名称为"answer",我无法确定哪些属于每种形式.
不知道这个解释是否能清楚地看到我的问题.有什么想法让这些东西完成吗?
谢谢你的帮助!
PD:不要关注Poll和Choice之间的关系,这些模型只是为了澄清问题,所以这种关系根本不重要.
是否可以提交两种不同的表格,在django中有一个提交按钮?我有一个称为"乐器"的表格和4个相同的表格"配置".现在我想提交一个配置和仪器.例如,仪器+配置1,仪器+配置2.每个配置都有自己的提交按钮.
我在配置表单中尝试了一个按钮:
<input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" >
Run Code Online (Sandbox Code Playgroud)
并调用js函数'onclick':
submitForms = function(){
console.log('ok'); //only for testing
document.forms["firstForm"].submit();
document.forms["secondForm"].submit();
}
Run Code Online (Sandbox Code Playgroud)
这是我在views.py中的方法:
if request.method == 'POST':
form1 = dataproviderInstrumentForm(request.POST)
form2 = dynamicTimeseriesForm(request.POST)
print(request.POST)
if form1.is_valid() or form2.is_valid():
# do some stuff
else:
form1 = dataproviderInstrumentForm() # an unbound form
form2 = dynamicTimeseriesForm() # an unbound form
Run Code Online (Sandbox Code Playgroud) 我有一个名为Student的模型,它有一些字段,与用户的一个OneToOne关系(django.contrib.auth.User).
class Student(models.Model):
phone = models.CharField(max_length = 25 )
birthdate = models.DateField(null=True)
gender = models.CharField(max_length=1,choices = GENDER_CHOICES)
city = models.CharField(max_length = 50)
personalInfo = models.TextField()
user = models.OneToOneField(User,unique=True)
Run Code Online (Sandbox Code Playgroud)
然后,我有一个模型的ModelForm
class StudentForm (forms.ModelForm):
class Meta:
model = Student
Run Code Online (Sandbox Code Playgroud)
使用Meta类中的fields属性,我设法只显示模板中的一些字段.但是,我可以指出要显示的用户字段吗?
有点像:
fields =('personalInfo','user.username')
Run Code Online (Sandbox Code Playgroud)
目前没有显示任何内容.仅适用于StudentFields /
提前致谢.
下面的代码示例,可以super使用,或者C有来电A.foo和B.foo明确?
class A(object):
def foo(self):
print 'A.foo()'
class B(object):
def foo(self):
print 'B.foo()'
class C(A, B):
def foo(self):
print 'C.foo()'
A.foo(self)
B.foo(self)
Run Code Online (Sandbox Code Playgroud) 我有常规的Django User模型和UserDetails模型(OneToOneField带User),它作为User模型的扩展.(我尝试了Django 1.5的功能,这是一个令人头疼的奇怪可怕的文档,所以我坚持OneToOneField选择)
所以,在我寻求建立一个自定义的注册页面,将有包括中的登记表User字段和UserDetails领域,我想知道是否有自动生成表格(及其所有验证的)这些两个相关模型的方法.我知道这适用于由一个模型组成的表单:
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
但是,无论如何要为包含两个相关模型的表单获得类似的功能吗?
我有一个只有一个字段的表单MultipleChoiceField.在模板中它被印有其它两种形式是ModelForm相同的HTML表格内秒(如所描述的在这里).
当读取POST视图中的所有数据时,一切都在那里并且正常工作,除了来自此的MultipleChoiceField值,如果直接从中选择它,则仅显示表格中的最后一个选定值request.POST['field']- 但有趣的是,如果我打印request.POST,则选择所有内容在那儿.这怎么可能?这真让我大吃一惊.
这是形式:
class EstadosAtendidosForm(forms.Form):
estadosSelecionados = forms.MultipleChoiceField(choices = choices.UF.list)
Run Code Online (Sandbox Code Playgroud)
这是观点:
@login_required
@csrf_protect
def cadastro_transportadora(request):
if request.method == 'POST':
print request.POST
print len(request.POST['estadosSelecionados'])
print request.POST
estadosSelecionados = request.POST['estadosSelecionados']
for estado in estadosSelecionados:
print estado
form_end = EnderecoForm(request.POST)
form_transp = TransportadoraForm(request.POST)
else:
transportadora_form = TransportadoraForm()
endereco_form = EnderecoForm()
estados_form = EstadosAtendidosForm()
return render(request, 'transporte/transportadora/cadastro.html', {'transportadora_form': transportadora_form, 'endereco_form': endereco_form, 'estados_form': estados_form})
Run Code Online (Sandbox Code Playgroud)
这是模板:
{% extends "transporte/base.html" %}
{% …Run Code Online (Sandbox Code Playgroud) 我正在为官方Django教程中的民意调查应用添加更多功能.我正在研究的一件事是通过登录用户创建投票/选择(而不是在管理屏幕中,教程离开我们).
我希望创建一个用户可以创建一个轮询的视图,然后还包括一些与轮询相关联的选择.Django Admin自动完成它,我不知道如何在视图中写出来.
首先,这些是我的相关文件:
models.py
import datetime
from django.db import models
from django.utils import timezone
class Poll(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
class Choice(models.Model):
question = models.ForeignKey(Poll)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __unicode__(self):
return self.choice_text
Run Code Online (Sandbox Code Playgroud)
forms.py
from django import forms
from .models import Poll, Choice
from datetime import datetime
class PollForm(forms.ModelForm):
question_text = forms.CharField(max_length=200, …Run Code Online (Sandbox Code Playgroud)