标签: django-forms

Django设置默认表单值

我有一个模型如下.

class TankJournal(models.Model):
    user = models.ForeignKey(User)
    tank = models.ForeignKey(TankProfile)
    ts = models.IntegerField(max_length=15)
    title = models.CharField(max_length=50)
    body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我还有一个上述模型的模型表格如下.

class JournalForm(ModelForm):
    tank = forms.IntegerField(widget=forms.HiddenInput()) 

    class Meta:
        model = TankJournal
        exclude = ('user','ts')
Run Code Online (Sandbox Code Playgroud)

我想知道如何设置该坦克隐藏字段的默认值.这是我到目前为止显示/保存表单的函数

def addJournal(request, id=0):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    # checking if they own the tank
    from django.contrib.auth.models import User
    user = User.objects.get(pk=request.session['id'])

    if request.method == 'POST':
        form = JournalForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)

            # setting the user and ts
            from time import time
            obj.ts = int(time()) …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-forms

220
推荐指数
5
解决办法
22万
查看次数

如何在Django ModelForm中过滤ForeignKey选项?

说我的我有以下内容models.py:

class Company(models.Model):
   name = ...

class Rate(models.Model):
   company = models.ForeignKey(Company)
   name = ...

class Client(models.Model):
   name = ...
   company = models.ForeignKey(Company)
   base_rate = models.ForeignKey(Rate)
Run Code Online (Sandbox Code Playgroud)

即有多个Companies,每个都有RatesClients.每个都Client应该有一个Rate从它的父级Company's Rates而不是另一个基础中选择的基础Company's Rates.

在创建用于添加a的表单时Client,我想删除Company选项(因为已经通过Company页面上的"添加客户端"按钮Rate选择了该选项)并且还将选择限制为该选项Company.

我如何在Django 1.0中解决这个问题?

我目前的forms.py文件只是样板文件:

from models import *
from django.forms import ModelForm

class ClientForm(ModelForm):
    class Meta:
        model = Client
Run Code Online (Sandbox Code Playgroud)

views.py也是基本的:

from django.shortcuts …
Run Code Online (Sandbox Code Playgroud)

python django django-forms

218
推荐指数
4
解决办法
13万
查看次数

如何在Django中的CharField上添加占位符?

以这个非常简单的形式为例.

class SearchForm(Form):
    q = forms.CharField(label='search')
Run Code Online (Sandbox Code Playgroud)

这将在模板中呈现:

<input type="text" name="q" id="id_q" />
Run Code Online (Sandbox Code Playgroud)

但是,我想将"占位符"属性添加到此字段,其值为"搜索",以便HTML看起来像:

<input type="text" name="q" id="id_q" placeholder="Search" />
Run Code Online (Sandbox Code Playgroud)

我希望通过字典或类似的方式将占位符值传递给表单类中的CharField:

q = forms.CharField(label='search', placeholder='Search')
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

python django django-forms

190
推荐指数
6
解决办法
9万
查看次数

在django Forms中定义css类

假设我有一个表格

class SampleClass(forms.Form):
    name = forms.CharField(max_length=30)
    age = forms.IntegerField()
    django_hacker = forms.BooleanField(required=False)
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在每个字段上定义css类,以便我可以在渲染页面中使用基于类的jQuery?

我希望不必手动构建表单.

python django django-forms

181
推荐指数
10
解决办法
13万
查看次数

默认情况下,在django表单字段中创建空查询集

我有以下形式的字段:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())
Run Code Online (Sandbox Code Playgroud)

区域来自点击城市,区域来自点击区域.随着 queryset=MyDistrict.objects.all()queryset=MyArea.objects.all()形式将非常沉重.默认情况下,如何将查询集设为空?

提前致谢

django django-forms

151
推荐指数
1
解决办法
6万
查看次数

Django将自定义表单参数传递给Formset

这是使用form_kwargs在Django 1.9中修复的.

我有一个看起来像这样的Django表单:

class ServiceForm(forms.Form):
    option = forms.ModelChoiceField(queryset=ServiceOption.objects.none())
    rate = forms.DecimalField(widget=custom_widgets.SmallField())
    units = forms.IntegerField(min_value=1, widget=custom_widgets.SmallField())

    def __init__(self, *args, **kwargs):
        affiliate = kwargs.pop('affiliate')
        super(ServiceForm, self).__init__(*args, **kwargs)
        self.fields["option"].queryset = ServiceOption.objects.filter(affiliate=affiliate)
Run Code Online (Sandbox Code Playgroud)

我用这样的方式称这个形式:

form = ServiceForm(affiliate=request.affiliate)
Run Code Online (Sandbox Code Playgroud)

request.affiliate登录用户在哪里.这按预期工作.

我的问题是我现在想把这个单一的表单变成一个formset.我无法弄清楚的是,在创建formset时,我如何将联盟信息传递给各个表单.根据文档制作一个formset,我需要做这样的事情:

ServiceFormSet = forms.formsets.formset_factory(ServiceForm, extra=3)
Run Code Online (Sandbox Code Playgroud)

然后我需要像这样创建它:

formset = ServiceFormSet()
Run Code Online (Sandbox Code Playgroud)

现在,我如何通过这种方式将affiliate = request.affiliate传递给单个表单?

python forms django django-forms

145
推荐指数
7
解决办法
4万
查看次数

如何构建多个提交按钮django表单?

我有一个输入电子邮件的表单和两个提交按钮来订阅和取消订阅时事通讯:

<form action="" method="post">
{{ form_newsletter }}
<input type="submit" name="newsletter_sub" value="Subscribe" />
<input type="submit" name="newsletter_unsub" value="Unsubscribe" />
</form>
Run Code Online (Sandbox Code Playgroud)

我也有课堂形式:

class NewsletterForm(forms.ModelForm):
    class Meta:
        model = Newsletter
        fields = ('email',)
Run Code Online (Sandbox Code Playgroud)

我必须编写自己的clean_email方法,我需要知道哪个按钮是提交的形式.但提交按钮的值不在self.cleaned_data字典中.我能获得按钮的值吗?

python submit button django-forms

143
推荐指数
5
解决办法
10万
查看次数

Django形式的CSS样式

如何设置以下样式:

在forms.py中 -

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)

在contact_form.html中 -

<form action="" method="post">
  <table>
    {{ form.as_table }}
  </table>
  <input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

例如,如何为主题,电子邮件,消息设置类或ID以提供外部样式表?谢谢

css django django-forms

134
推荐指数
8
解决办法
13万
查看次数

创建动态选择字段

我在尝试理解如何在django中创建动态选择字段时遇到了一些麻烦.我有一个模型设置类似于:

class rider(models.Model):
     user = models.ForeignKey(User)
     waypoint = models.ManyToManyField(Waypoint)

class Waypoint(models.Model):
     lat = models.FloatField()
     lng = models.FloatField()
Run Code Online (Sandbox Code Playgroud)

我要做的是创建一个选择字段,其值是与该骑手相关联的航点(可以是登录的人).

目前我在我的表单中覆盖init,如下所示:

class waypointForm(forms.Form):
     def __init__(self, *args, **kwargs):
          super(joinTripForm, self).__init__(*args, **kwargs)
          self.fields['waypoints'] = forms.ChoiceField(choices=[ (o.id, str(o)) for o in Waypoint.objects.all()])
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是列出所有航点,它们与任何特定的骑手没有联系.有任何想法吗?谢谢.

python django django-templates django-forms

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

Django模板:选择的详细版本

我有一个模特:

from django.db import models

CHOICES = (
    ('s', 'Glorious spam'),
    ('e', 'Fabulous eggs'),
)

class MealOrder(models.Model):
    meal = models.CharField(max_length=8, choices=CHOICES)
Run Code Online (Sandbox Code Playgroud)

我有一个表格:

from django.forms import ModelForm

class MealOrderForm(ModelForm):
    class Meta:
        model = MealOrder
Run Code Online (Sandbox Code Playgroud)

我想使用formtools.preview.默认模板打印选择的短版本('e'而不是'Fabulous eggs'),因为它使用

{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Run Code Online (Sandbox Code Playgroud)

我想要一个像上面提到的一般模板,但是打印'Fabulous eggs'代替.

[因为我怀疑真正的问题在哪里,我为所有人加粗了:)]

我知道如何以一种本身丑陋的方式获得一个选择的冗长版本:

{{ form.meal.field.choices.1.1 }}
Run Code Online (Sandbox Code Playgroud)

真正的痛苦是我需要得到所选择的选择,而我想到的唯一方法是迭代选择和检查{% ifequals currentChoice.0 choiceField.data %},这甚至更加丑陋.

可以轻松完成吗?或者它需要一些模板标签编程?难道这不应该在django中可用吗?

django django-templates django-forms

122
推荐指数
6
解决办法
6万
查看次数