【问题标题】:django form rendering out of orderdjango表单渲染乱序
【发布时间】:2018-12-22 09:18:01
【问题描述】:

我正在学习如何使用 ModelForms,并且我已经成功地获得了要呈现的表单,但是这些字段没有按照我希望的顺序显示。我尝试更改 forms.py 中的顺序,但没有效果。我该如何更改订单;例如,将title 放在顶部而不是底部,并使picture 字段倒数第二个而不是第二个?

models.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Post(models.Model):

    title = models.CharField(max_length=150)
    price = models.CharField(max_length=100)
    body = models.TextField()
    pub_date = models.DateTimeField(null=True)
    author = models.ForeignKey(User, null=True)
    category = models.CharField(max_length=150, null=True)
    picture = models.ImageField(upload_to='ad_pictures', default='')

    def __str__(self):
        return self.title

forms.py

from django import forms
from .models import Post
from django.contrib.auth.models import User

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = {
            'title',
            'body',
            'category',
            'price',
            'picture',
        }

views.py

def create(request):
    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return render(request, 'classifieds/latest-ads.html')
    else:
        form = PostForm()
        args = {'form': form}
        return render(request, 'classifieds/create-post.html', args)

创建.html

{% extends 'base.html' %}

{% block head %}
<!-- {% load static %}
<link rel="stylesheet" href="{% static 'accounts/login.css' %}" type="text/css"> -->
<title>Create Post</title>
{% endblock %}

{% block body %}

<div class="container"><br>
  <form method="POST" action='' enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" value="submit">Submit</button>
  </form>
</div>
{% endblock %}

我想指出,在this 视频中,上传者能够操纵订单并在模板中更改渲染,但我不能。

非常感谢任何见解。

【问题讨论】:

  • 没见过,谢谢。不过,我仍然不确定我实际上将Form.order_fields(field_order) 放在哪里。
  • 本打算在答案中向您展示,但您发布了您的 models.py 而不是 forms.py... :/ 在视频中虽然他能够更改顺序,因为他指定了 fields在表格的Meta 中。 Django 也将使用该命令
  • 我已经更新了帖子,对此我深表歉意。

标签: django templates render modelform


【解决方案1】:

不需要field_order = ['price', 'title', 'body', 'category', 'picture']

只需将{} 替换为() 即可获得fields

所以你应该有:

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = (
            'title',
            'body',
            'category',
            'price',
            'picture',
        )

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2011-09-20
    • 1970-01-01
    • 2013-10-10
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多