【发布时间】:2021-03-20 21:56:31
【问题描述】:
在模板中,我想调用外键表单字段的类属性item.pid,如下所示
{%for item in form.item %}
{{item.pid}}
{% endfor %}
我的问题很简单,解决方案也应该如此,但我现在被困在这里太久了。我已经尝试过表单集、内联表单集、干净以及文档中和 SO 上的更多内容。 甚至不能调用表单域的类方法。
调用 {{form.instance.item.pid}} 应该是解决方案,但我无法让它运行。
model.py
class Event(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, blank=True, null=True, default=0)
item = models.ForeignKey(Item, on_delete=models.CASCADE, blank=True, null=True, default=0)
#many more
class Person(models.Model):
person_number = models.IntegerField(null=True)
name = models.CharField(max_length=200, null=True)
surname = models.CharField(max_length=200, null=True)
#many more
class Item(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, blank=True, null=True, default=0)
pid = models.IntegerField(null=True)
#many more
def save(self, *args, **kwargs):
self.pid = Person.objects.filter(surname=self.person.surname, name=self.person.name).values("person_number")
super(Item, self).save(*args, **kwargs)
views.py
def event(request, event_id=None):
if event_id:
instance = get_object_or_404(Event, pk=event_id)
else:
instance = Event()
form = EventForm(request.POST or None, instance=instance)
if request.POST and form.is_valid():
form.save()
return HttpResponseRedirect(reverse('cal:calendar'))
context = {
'form': form,
}
return render(request, 'cal/event.html', context)
forms.py
class EventForm(ModelForm):
class Meta:
model = Event
fields = ('person', 'item', 'manymore',)
【问题讨论】:
-
显示该信息的目的是什么?
Event表单的Item字段(默认情况下)将允许您在不同的项目之间进行选择。但是,如果您愿意,您可以更改这些选择的呈现方式。 -
我根据 item.pid 和 person.person_number 做出选择。例如创建一个链式下拉选择
标签: django forms foreign-keys class-attributes