【问题标题】:DRF - post to ManyToMany fieldDRF - 发布到多对多字段
【发布时间】:2015-07-07 18:15:40
【问题描述】:

在我的 Django 应用中:

models.py:

class Destination(models.Model):
    name=models.CharField(max_length=30)

class Ride(models.Model):
    driver = models.ForeignKey('auth.User', related_name='rides_as_driver')
    destination=models.ForeignKey(Destination, related_name='rides_as_final_destination')
    leaving_time=models.TimeField()
    num_of_spots=models.IntegerField()
    passengers=models.ManyToManyField('auth.User', related_name="rides_as_passenger")
    mid_destinations=models.ManyToManyField(Destination, related_name='rides_as_middle_destination')

序列化器:

class RideSerializer(serializers.ModelSerializer):
    driver = serializers.ReadOnlyField(source='driver.username')

    class Meta:
        model = Ride
        fields = ('id', 'driver', 'destination', 'leaving_time',
                  'num_of_spots', 'passengers', 'mid_destinations')
        read_only_fields = ('id', 'driver', 'passengers', 'mid_destinations')

如您所见,mid_destinations 是一个多对多字段。

我的问题是-如何发布到多对多字段?

到常规字段,我可以从我的 android 应用程序 中使用这样的 json 发布:

{ "destination" : "LA", "num_of_spots" : "3", "leaving_time" : "14:35"}

如何 POST 到 ManyToMany 字段?

先谢谢了!

【问题讨论】:

    标签: django-rest-framework manytomanyfield


    【解决方案1】:

    你应该采取两个步骤:

    1. read_only_fields列表中删除'mid_destinations'

    2. 发送像{"mid_destinations": ["LA", "SF", "SD"], ...}这样的POST数据

    我假设您使用的是 DRF 3。

    【讨论】:

    • 感谢您的回答。 “mid_destination”是只读字段的原因是 - 我不希望用户必须放置 mid_destination 字段,这意味着 - 用户应该能够在没有 mid_destinations 字段和具有 mid_destination 字段的情况下创建骑行。当用户没有值时,我可以只发送一个空数组吗?
    • @OfekAgmon - 是的,空数组正是当用户不提供任何 mid_destination 时客户端应该发送的内容。
    • @tamakisquare - 我认为数据应该像 { "destination" : "LA", "num_of_spots" : "3", "leaving_time" : "14:35", "mid_destinations": [" SF", "SD"], ...}
    • @RajeshKaushik - 你是对的!当我想说“mid_destinations”时,我不小心放下了“destination”。感谢您指出了这一点。我希望我没有混淆 OP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多