django 表单渲染乱序
django form rendering out of order
我正在学习如何使用 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)
create.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 视频中,上传者能够操纵顺序并在模板中更改渲染,但我不能。
非常感谢任何见解。
不需要field_order = ['price', 'title', 'body', 'category', 'picture']
只需将 {}
替换为 ()
即可 fields
所以你应该:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'title',
'body',
'category',
'price',
'picture',
)
我正在学习如何使用 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)
create.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 视频中,上传者能够操纵顺序并在模板中更改渲染,但我不能。
非常感谢任何见解。
不需要field_order = ['price', 'title', 'body', 'category', 'picture']
只需将 {}
替换为 ()
即可 fields
所以你应该:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
'title',
'body',
'category',
'price',
'picture',
)