簡體   English   中英

在 Django Rest 框架中發布外鍵 ID

[英]Posting foreign key IDs in Django Rest Framework

我正在使用 Django Z55276C10D84E1DF7713B441E76E1 框架開發 Django API。 我有兩個相關的實體, EventVenue 一個事件發生在一個場地。

通過使用嵌套序列化,我可以將以下內容返回給我的 API 用戶:

{
  "id": "1234",
  "name": "My event",
  "venue": {
    "id": "5678",
    "name": "My venue"
  }
}

這一切都在預料之中。 但是,我現在正在嘗試發布事件並將場地作為參數引用:

POST /api/events/

{
  "name": "My new event",
  "venue_id": "5678"
}

但我正在努力完成這項工作。 我正在嘗試將venue_idvenue作為屬性名稱(我更喜歡_id ,因為它會更正確,但這沒什么大不了的)。

我正在使用以下序列化程序:

class VenueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Venue
        fields = ['id', 'name', 'created_at', 'updated_at']

class EventSerializer(serializers.ModelSerializer):
    venue = VenueSerializer()

    class Meta:
        model = Event
        fields = ['id', 'name', 'venue', 'created_at', 'updated_at']

實現這一目標的正確方法是什么?

如果您使用 PrimaryKey(thevenue_id) 而不是整個 model object,您可以使用PrimaryKeyRelatedField而不是嵌套的序列化程序。

在您的示例中,它看起來像:

class EventCreateSerializer(serializers.ModelSerializer):
    venue = PrimaryKeyRelatedField(queryset=Venue.objects.all())

    class Meta:
        model = Event
        fields = ['id', 'name', 'venue', 'created_at', 'updated_at']

你應該使用請求:

{
  "name": "My new event",
  "venue": "5678"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM