У меня есть Django модель API остального фреймворка, которая содержит поле внешнего ключа.
Я хочу показать пользователю В просматриваемом API своего рода выпадающее меню для выбора существующих объектов или создания нового, как в интерфейсе администратора, существует ли что-то подобное этому?
Модели:
class Mission(models.Model):
id = models.UUIDField(primary_key=False, default=uuid.uuid4, editable=False)
mission_name = models.CharField(name='MissionName',
verbose_name="Mission Name",
unique=True,
max_length=255,
blank=False,
help_text="Enter the mission's name",
primary_key=True
)
uav_lat = models.FloatField(name="UavLatitude",
verbose_name="UAV Latitude",
unique=False, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=DEFAULT_VALUE)
uav_lon = models.FloatField(name="UavLongitude",
verbose_name="UAV Longitude",
unique=False, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=DEFAULT_VALUE)
uav_elevation = models.FloatField(name="UavElevation",
verbose_name="UAV Elevation",
max_length=100, default=1,
blank=False,
help_text="Enter the above ~Sea Level~ planned uav Elevation. "
)
area = models.CharField(
name='Area',
max_length=8,
choices=AREAS,
)
date_added = models.DateTimeField(verbose_name="Date Added", default=now())
gdt = models.ForeignKey(KnownLocation, on_delete=models.PROTECT)
class Meta:
get_latest_by = 'date_added'
Модель KnownLocation:
class KnownLocation(models.Model):
name = models.CharField(name="Name",
unique=False,
primary_key=True,
max_length=150,
blank=False,
help_text="Enter the name of the location's name")
area = models.CharField(name='Area',
max_length=8,
choices=AREAS, )
date_added = models.DateTimeField(default=timezone.now)
latitude = models.FloatField(name="Latitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=DEFAULT_VALUE)
longitude = models.FloatField(name="Longitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Longitude, second when extracting from Google Maps.",
default=DEFAULT_VALUE)
elevation = models.FloatField(name="Elevation",
help_text="Enter the location's ~Sea Level~ elevation, or Leave empty for auto-fill. ",
blank=True,
null=True
)
Мои сериализаторы:
class KnownLocationSerializer(HyperlinkedModelSerializer):
def create(self, validated_data):
"""
Checks if user inputted the elevation or left it None.
If value is None, it will be changed to the value fetched from Google's elevation API.
"""
if not validated_data["Elevation"]:
elevation = get_elevation(validated_data["Latitude"], validated_data["Longitude"])
validated_data["Elevation"] = round(elevation, 3)
return super().create(validated_data)
date_added = DateTimeField(format="%d-%m-%Y", required=False, read_only=True)
class Meta:
model = KnownLocation
fields = ('Name', 'Area', 'Latitude', 'Longitude', 'Elevation', 'date_added')
class MissionSerializer(ModelSerializer):
gdt = KnownLocationSerializer(many=False, read_only=False)
class Meta:
model = Mission
fields = ('id', 'MissionName', 'UavLatitude', 'UavLongitude', 'UavElevation', 'Area', 'gdt')
Поведение администратора, которое я хотел бы подражать в API с возможностью просмотра. 