Python 在django restframework视图中显示外键选项

Python 在django restframework视图中显示外键选项,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,我在applyurl视图中将所有作业显示为选项时遇到问题,请参见下图 我得到的错误是 HTML输入当前不支持列表 我正在寻找的主要功能是提供一个职位列表,这些职位在申请该职位时可供选择 型号.py class Job(models.Model): """A Job used to create a job posting""" user = models.ForeignKey( settings.AUTH_USER_M

我在
apply
url视图中将所有
作业显示为选项时遇到问题,请参见下图

我得到的错误是

HTML输入当前不支持列表

我正在寻找的主要功能是提供一个职位列表,这些职位在申请该职位时可供选择

型号.py

class Job(models.Model):
  """A Job used to create a job posting"""
  user = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE,
  )
  description = models.TextField()
  job_type = models.CharField(max_length=12, choices=JOB_TYPE_CHOICES, default='Full-Time')
  city = models.CharField(max_length=255)

  def __str__(self):
    return self.description[:50]


class Applicant(models.Model):
  """A applicant that can apply to a job"""
  job = models.ForeignKey(Job, related_name='applicants', on_delete=models.CASCADE)
  first_name = models.CharField(max_length=255)
  last_name = models.CharField(max_length=255)
  email = models.EmailField(max_length=254)
  phone_number = PhoneNumberField()
  resume = models.FileField(upload_to=resume_file_path, validators=[validate_file_extension])

  def __str__(self):
    return self.first_name
from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _

from core.models import Job, Applicant


class JobSerializer(serializers.ModelSerializer):
  """Serializer for tag objects"""
  applicants = serializers.StringRelatedField(many=True)

  class Meta:
    model = Job
    fields = ('id', 'description', 'job_type', 'city', 'state', 'salary', 'position', 'employer', 'created_date', 'is_active', 'applicants')
    read_only_fields = ('id',)
 

  def create(self, validated_data):
    """Create a job posting with user and return it"""
    return Job.objects.create(**validated_data)


class ApplyJobSerializer(serializers.ModelSerializer):
  """Serializer for applying to jobs"""
  jobs = JobSerializer(many=True, queryset=Job.objects.all())

  class Meta:
    model = Applicant
    fields = ('id','jobs', 'first_name', 'last_name', 'email', 'phone_number', 'resume')
    read_only_fields = ('id',)
class ApplyJobView(generics.CreateAPIView):
  """Allows applicants to apply for jobs"""
  serializer_class = serializers.ApplyJobSerializer
我删除了
Job
中的一些属性,这样代码就不会那么长

序列化程序.py

class Job(models.Model):
  """A Job used to create a job posting"""
  user = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE,
  )
  description = models.TextField()
  job_type = models.CharField(max_length=12, choices=JOB_TYPE_CHOICES, default='Full-Time')
  city = models.CharField(max_length=255)

  def __str__(self):
    return self.description[:50]


class Applicant(models.Model):
  """A applicant that can apply to a job"""
  job = models.ForeignKey(Job, related_name='applicants', on_delete=models.CASCADE)
  first_name = models.CharField(max_length=255)
  last_name = models.CharField(max_length=255)
  email = models.EmailField(max_length=254)
  phone_number = PhoneNumberField()
  resume = models.FileField(upload_to=resume_file_path, validators=[validate_file_extension])

  def __str__(self):
    return self.first_name
from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _

from core.models import Job, Applicant


class JobSerializer(serializers.ModelSerializer):
  """Serializer for tag objects"""
  applicants = serializers.StringRelatedField(many=True)

  class Meta:
    model = Job
    fields = ('id', 'description', 'job_type', 'city', 'state', 'salary', 'position', 'employer', 'created_date', 'is_active', 'applicants')
    read_only_fields = ('id',)
 

  def create(self, validated_data):
    """Create a job posting with user and return it"""
    return Job.objects.create(**validated_data)


class ApplyJobSerializer(serializers.ModelSerializer):
  """Serializer for applying to jobs"""
  jobs = JobSerializer(many=True, queryset=Job.objects.all())

  class Meta:
    model = Applicant
    fields = ('id','jobs', 'first_name', 'last_name', 'email', 'phone_number', 'resume')
    read_only_fields = ('id',)
class ApplyJobView(generics.CreateAPIView):
  """Allows applicants to apply for jobs"""
  serializer_class = serializers.ApplyJobSerializer
视图.py

class Job(models.Model):
  """A Job used to create a job posting"""
  user = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    on_delete=models.CASCADE,
  )
  description = models.TextField()
  job_type = models.CharField(max_length=12, choices=JOB_TYPE_CHOICES, default='Full-Time')
  city = models.CharField(max_length=255)

  def __str__(self):
    return self.description[:50]


class Applicant(models.Model):
  """A applicant that can apply to a job"""
  job = models.ForeignKey(Job, related_name='applicants', on_delete=models.CASCADE)
  first_name = models.CharField(max_length=255)
  last_name = models.CharField(max_length=255)
  email = models.EmailField(max_length=254)
  phone_number = PhoneNumberField()
  resume = models.FileField(upload_to=resume_file_path, validators=[validate_file_extension])

  def __str__(self):
    return self.first_name
from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _

from core.models import Job, Applicant


class JobSerializer(serializers.ModelSerializer):
  """Serializer for tag objects"""
  applicants = serializers.StringRelatedField(many=True)

  class Meta:
    model = Job
    fields = ('id', 'description', 'job_type', 'city', 'state', 'salary', 'position', 'employer', 'created_date', 'is_active', 'applicants')
    read_only_fields = ('id',)
 

  def create(self, validated_data):
    """Create a job posting with user and return it"""
    return Job.objects.create(**validated_data)


class ApplyJobSerializer(serializers.ModelSerializer):
  """Serializer for applying to jobs"""
  jobs = JobSerializer(many=True, queryset=Job.objects.all())

  class Meta:
    model = Applicant
    fields = ('id','jobs', 'first_name', 'last_name', 'email', 'phone_number', 'resume')
    read_only_fields = ('id',)
class ApplyJobView(generics.CreateAPIView):
  """Allows applicants to apply for jobs"""
  serializer_class = serializers.ApplyJobSerializer
我已尝试将
queryset=Job.objects.all()
作为参数添加到my serializers.py字段的
ApplyJobSerializer
类中的
JobSerializer()
。然而,我得到一个错误,说


TypeError:\uuuu init\uuuuuu()得到一个意外的关键字参数“queryset

您可以在表单中选择一个现有作业

class JobSerializer(serializers.PrimaryKeyRelatedField, serializers.ModelSerializer):
    """Serializer for tag objects"""
    applicants = serializers.StringRelatedField(many=True)

    class Meta:
        model = Job
        fields = ('__all__')
        read_only_fields = ('id',)

    def create(self, validated_data):
        """Create a job posting with user and return it"""
        return Job.objects.create(**validated_data)


class ApplyJobSerializer(serializers.ModelSerializer):
    """Serializer for applying to jobs"""
    jobs = JobSerializer(many=True, queryset=Job.objects.all())

    class Meta:
        model = Applicant
        fields = ('__all__')
        read_only_fields = ('id',)
由于我创建了一个具有
description
的新作业,因此此结果为
desc

我过去试过,现在又试过,但它没有在web浏览器上显示任何内容。你是说字段
作业
没有显示在表单create中吗?如果是,由于此设置:
read_only=True
。是,
作业不显示。我去掉了
read_only=True
,现在它的词条
列表在HTML输入中不受支持。
明白了,那么你想在表单中创建新作业还是选择现有作业?我已经更新了答案,请帮我检查!