简体   繁体   English

无法使用 Django Rest Framework 保存两个对象之间的关系

[英]Unable to save relationship between two objects with Django Rest Framework

I am building a Django/React App to allow users to submit orders that need to go from A to B. The user initially saves the addresses in the database and then he/she selects it in the order form.我正在构建一个 Django/React 应用程序,以允许用户提交需要从 A 到 B 的订单。用户最初将地址保存在数据库中,然后他/她在订单中选择它。 When they submit I attempt to create a relationship in the database, I'm using Django Rest Framework serializers to create the Order object in the database.当他们提交时,我尝试在数据库中创建关系,我使用 Django Rest Framework 序列化程序在数据库中创建 Order 对象。

Unfortunately, I'm unable to successfully save the items as I'm not properly linking the addresses to the order.不幸的是,我无法成功保存这些项目,因为我没有正确地将地址链接到订单。 Im getting the following error:我收到以下错误:

destinationAddress: ["Invalid value."]
originAddress: ["Invalid value."]

Models楷模

class Order(models.Model):
    originAddress = models.ForeignKey(Address, related_name="originAddress",  null=True, on_delete=models.CASCADE)
    destinationAddress = models.ForeignKey(Address, related_name="destinationAddress",   null=True, on_delete=models.CASCADE)
    packages = models.CharField("Packages", max_length=1024)

class Address(models.Model):
    address_code = models.CharField(max_length=250)
    contact = models.CharField("Contact", max_length=1024)
    phone = models.CharField("Phone", max_length=20)
    company = models.CharField("Company", max_length=250)
    addressLine1 = models.CharField("Address line 1", max_length=1024)
    addressLine2 = models.CharField("Address line 2", max_length=1024, blank=True)
    postalCode = models.CharField("Postal Code", max_length=12)
    city = models.CharField("City", max_length=1024)
    state = models.CharField("State", max_length=250)

Serializers序列化器

class AddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = '__all__'


class OrderSerializer(serializers.ModelSerializer):
    originAddress = serializers.SlugRelatedField(
        queryset=Address.objects.all(),
        slug_field='pk'
    )
    destinationAddress = serializers.SlugRelatedField(
        queryset=Address.objects.all(),
        slug_field='pk'
    )


    class Meta:
        model = Order
        fields = ('id', 'packages', 'destinationAddress', 'originAddress')

ViewSets视图集

class OrderViewSet(viewsets.ModelViewSet):
    queryset = Order.objects.all()

    permission_classes = [
        permissions.AllowAny
    ]

    serializer_class = OrderSerializer

class AddressViewSet(viewsets.ModelViewSet):
    queryset = Address.objects.all()

    permission_classes = [
        permissions.AllowAny
    ]

    serializer_class = AddressSerializer

Any ideas?有任何想法吗? Thanks谢谢

Solved it by replacing SlugRelatedField to PrimaryKeyRelatedField通过将SlugRelatedField替换为PrimaryKeyRelatedField解决了这个问题

class OrderSerializer(serializers.ModelSerializer):

    originAddress = serializers.PrimaryKeyRelatedField(
        queryset=Address.objects.all(), allow_null=True, required=False
    )
    destinationAddress = serializers.PrimaryKeyRelatedField(
        queryset=Address.objects.all(), allow_null=True, required=False
    )

    class Meta:
        model = Order
        fields = ('id', 'packages', 'destinationAddress', 'originAddress')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM