首页 > 解决方案 > Django 从模板中的序列化程序获取 ForeignKey 字段值

问题描述

我正在尝试创建一个页面表单,该表单实际上是一个 DRF 序列化程序(尽管我认为这实际上并没有太大区别)。

在创建对象之前,我需要能够从 ForeignKey 字段的远端访问字段值。

*** Models.py ***
class Tag(models.Model):
  name = models.CharField(max_length=20)
  colour = models.CharField(max_length=20)

class Entry(models.Model):
  title = models.CharField(max_length=100)
  date = models.DateField()
  tags = models.ForeignKey(Tag)

*** Serializer.py ***
class EntrySerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Entry
        fields = '__all__'

*** views.py ***
from rest_framework.views import APIView
class Submit(APIView):
    renderer_classes = [TemplateHTMLRenderer]
    template_name = 'submit.html'

    def get(self, request, format=None):
        context = {}
        context['serializer'] = serializers.EntrySerializer(context={'request': request})
        return render(request, self.template_name, context)

    def post(self, request, format=None):
        ...

以下适用于访问 2 个对象字段:

*** submit.html ***
  {% for tag in serializer.tag.iter_options %}
    {{ tag.value }}-{{ tag.display_text }}
  {% endfor %}

但是,我想做也能够访问颜色字段:

*** submit.html ***
  {% for tag in serializer.tag.iter_options %}
    {{ tag.value }}-{{ tag.colour }}
  {% endfor %}

蒂亚!

标签: pythondjangodjango-rest-frameworkforeign-keys

解决方案


通过挖掘原始字段模型,可以获得查询集并对其进行迭代:

{% for tag in serializer.tag.queryset.all %}
   {{ tag.value }}-{{ tag.colour }}
{% endfor %}

推荐阅读