我写了一份表格范本.我使用小部件来制作单选按钮,并且我希望在html文件中呈现表单时,默认选中特定的单选按钮.

模型:

class Room(models.Model):
    class Meta:
    number =  models.PositiveSmallIntegerField()
    CATEGORIES = (
        ('Regular', 'Regular'),
        ('Executive', 'Executive'),
        ('Deluxe', 'Deluxe'),
    )
    category = models.CharField(max_length=9, choices=CATEGORIES, default='Regular')
    CAPACITY = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
    )
    capacity = models.PositiveSmallIntegerField(
        choices=CAPACITY, default=2
        )
    advance = models.PositiveSmallIntegerField(default=10)
    manager = models.CharField(max_length=30)

以下是基于上述模型的我的模型表单.

表格:

class AddRoomForm(forms.ModelForm):
    ROOM_CATEGORIES = (
        ('Regular', 'Regular'),
        ('Executive', 'Executive'),
        ('Deluxe', 'Deluxe'),
    )

    category = forms.CharField(
        max_length=9,
        widget=forms.RadioSelect(choices=ROOM_CATEGORIES),
    )

    ROOM_CAPACITY = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
    )

    capacity = forms.CharField(
        max_length=9,
        widget=forms.RadioSelect(choices=ROOM_CAPACITY),
    )
    class Meta:
        model = Room
        fields = ['number', 'category', 'capacity', 'advance']

以下是观点:

def add_room(request):
    if request. Method == 'POST':
        form = AddRoomForm(request.POST)
        if form.is_valid():
            room = Room(number=request.POST['number'],
                    category=request.POST['category'],
                    capacity=request.POST['capacity'],
                    advance=request.POST['advance'],
                    manager=request.user.username)
            room.save()
            # Implemented Post/Redirect/Get.
            return redirect('../rooms/')
        else:
            context = {
                'form': form,
                'username': request.user.username
                }
            return render(request, 'add_room.html', context)
    context = {
            'form': AddRoomForm(),
            'username': request.user.username
            }
    return render(request, 'add_room.html', context)

我在我的html文件中呈现了这样的表单.

<form method="POST">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" class= "submit submit-right" value="Add" />
</form>

我在某个地方读到,我可以在我的views.py文件中使用‘初始’关键字,但我不知道如何使用它.有没有人能帮我一下?

推荐答案

通过覆盖该字段,您将失go 与基础模型字段的绑定.只需指定小部件:

class AddRoomForm(forms.ModelForm):
    class Meta:
        model = Room
        fields = ['number', 'category', 'capacity', 'advance']
        widgets = {'category': forms.RadioSelect, 'capacity': forms.RadioSelect}

对于经理来说,使用ForeignKey到用户模型也可能更好:

from django.conf import settings


class Room(models.Model):
    number = models.PositiveSmallIntegerField()
    CATEGORIES = (
        ('Regular', 'Regular'),
        ('Executive', 'Executive'),
        ('Deluxe', 'Deluxe'),
    )
    category = models.CharField(
        max_length=9, choices=CATEGORIES, default='Regular'
    )
    CAPACITY = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
    )
    capacity = models.PositiveSmallIntegerField(choices=CAPACITY, default=2)
    advance = models.PositiveSmallIntegerField(default=10)
    manager = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, editable=False
    )

而这ModelForm人可以自己处理创造:

from django.contrib.auth.decorators import login_required


@login_required
def add_room(request):
    if request.method == 'POST':
        form = AddRoomForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.manager = request.user
            form.save()
            return redirect('../rooms/')
    else:
        form = AddRoomForm()
    context = {'form': form, 'username': request.user.username}
    return render(request, 'add_room.html', context)

Note:可以将视图限制为只允许经过身份验证的用户查看 @login_required decorator [Django-doc].

Python相关问答推荐

acme错误-Veritas错误:模块收件箱没有属性linear_util'

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

根据在同一数据框中的查找向数据框添加值

删除最后一个pip安装的包

将输入管道传输到正在运行的Python脚本中

为什么这个带有List输入的简单numba函数这么慢

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

try 将一行连接到Tensorflow中的矩阵

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

计算分布的标准差

如何启动下载并在不击中磁盘的情况下呈现响应?

Pandas Data Wrangling/Dataframe Assignment

在单次扫描中创建列表

pandas:对多级列框架的列进行排序/重新排序

从列表中获取n个元素,其中list [i][0]== value''

为什么Python内存中的列表大小与文档不匹配?

修改.pdb文件中的值并另存为新的

查找查找表中存在的列值组合

如何计算Pandas 中具有特定条件的行之间的天差

是否从Python调用SHGetKnownFolderPath?