python - 渲染表单时如何不显示“Id:”?(与 'ParentClass ptr:' 相同)
问题描述
我用modelformset_factory制作了一个表格(实际上是Formset)。和一起表示
<form method="post" action="">
{% csrf_token %}
{{ player_formset.management_form }}
{% for player_form in player_formset %}
{% for field in player_form %}
{{ field.label_tag }} {{ field }}
{% endfor %}
<br>
{% endfor %}
<input type="submit" value="Aggiungi">
</form>
当它渲染时自动添加一个字段,写为'Human ptr:'(因为我的模型 Player 是 Human 的子类......如果我直接使用 Human,他会向我显示'Id:',标题只是为了概括问题)。
我怎样才能删除这个写?我试过了:
1)在 html 文件中使用标签{% forloop.last %}但实际上最后一个字段是“删除:”复选框(如果我使用can_delete=False它可以工作,但我需要它)
2) 在 PlayerForm(ModelForm) Meta 中更改标签,但似乎不适用于该字段。奇怪的是,widgets = {'human_ptr': Input(attrs={})}但它会影响{{ field }}而不是{{ field.label_tag }}
如果有用,我会添加相关代码的所有部分:
表格.py
from skeleton.models import Player
from django.forms import ModelForm
from django.forms.widgets import Input
class PlayerForm(ModelForm):
class Meta:
model = Player
fields = ['first_name', 'last_name', 'jersey_number']
labels = {
'first_name': 'Nome',
'last_name': '',
'jersey_number': 'Numero di maglia',
'human_ptr': 'human_ptr', }
# widgets = {'human_ptr': Input(attrs={})}
视图.py
from django.shortcuts import render, redirect
from skeleton.models import Player
from django.contrib.auth.decorators import login_required
from .forms import PlayerForm
from django.forms import modelformset_factory
from django.http import HttpResponseNotFound
# Create your views here.
@login_required(login_url="/accounts/login/")
def team_area(request):
if request.user.team is not None:
PlayerFormSet = modelformset_factory(Player, form=PlayerForm, extra=1, can_delete=True,)
if request.method == "POST":
player_formset = PlayerFormSet(
request.POST,
request.FILES,
queryset=Player.objects.all().filter(team=request.user.team),)
for player_form in player_formset:
if player_form.is_valid():
player = player_form.save(commit=False)
player.team = request.user.team
if player_formset.is_valid():
player_formset.save()
return redirect('team_area:home')
else:
player_formset = PlayerFormSet(queryset=Player.objects.all().filter(team=request.user.team))
return render(request, 'team_area/team_area.html', {'player_formset': player_formset})
else:
return render(request, 'team_area/empty_page.html')
模型.py
class Human(models.Model):
SHIRT_SIZES = (('XXS', 'XXS'), ('XS', 'XS'), ('S', 'S'), ('M', 'M'), ('L', 'L'), ('XL', 'XL'), ('XXL', 'XXL'))
team = models.ForeignKey(Team, on_delete=models.CASCADE)
first_name = models.CharField(max_length=16)
last_name = models.CharField(max_length=16)
jersey_size = models.CharField(max_length=4, choices=SHIRT_SIZES, blank=True)
slug = models.SlugField(blank=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.first_name + ' ' + self.last_name)
super(Human, self).save(*args, **kwargs)
def __str__(self):
return self.first_name + ' ' + self.last_name
class Player(Human):
year_of_birth = models.IntegerField(validators=[MinValueValidator(1900), MaxValueValidator(2100)], blank=True, null=True)
jersey_number = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(99)], blank=True, null=True)
all_star_game = models.ForeignKey(AllStarGame, on_delete=models.CASCADE, blank=True, null=True)
可能我想直接修改表单(views.py),而不是我显示它的方式(team_area.html)。
解决方案
它不漂亮,但它有效
{% for field in player_form %}
{% if field.label_tag != id %}
{{ field.label_tag }} {{ field }}
{% endif %}
{% endfor %}
推荐阅读
- matlab - MATLAB-为什么我的 contourf 拒绝将 .1- -.1 值填充为白色?
- sharepoint - 如何在 Sharepoint List 值中显示上标?
- javascript - I'm generating a list from an array how can I know what element I'm clicking?
- python - 使用带有 Python 的 Gmail API,搜索邮件返回 Requested entity was not found
- r - 在 R 版本 4.0.0 中导入 .txt 文件,其中数据包含在 {}
- javascript - css 文件中的问题 - 空 css 规则问题?
- powerbi - 无论如何在同一个报告中使用多个数据集?
- javascript - Gremlin-Javascript:支持 SubgraphStrategy 和 subgraph step
- java - Java Spring - 强制不继承bean
- javascript - DOM 元素未初始化