Django Rest Framework不为少量请求保存外键

时间:2013-06-16 07:11:09

标签: python django django-rest-framework

我正在使用Django Rest Framework为移动应用提供API。我有两个型号,Order和User。订单与用户具有外键关系。

对于我所有订单对象的约1%左右,“用户”字段为空。我一直在使用cURL测试这种行为。

如果我在没有用户对象的情况下执行cURL,它会告诉我“此字段是必需的”。 如果使用错误的用户对象,它会告诉我该对象不存在。这些都是预期和预期的行为。

我试图弄清楚如何在没有用户字段的情况下保存某些Order对象。有什么我没有考虑到的吗?

我的观点:

class OrderList (generics.ListCreateAPIView):
    model = Order
    serializer_class = OrderSerializer

序列化器:

class OrderSerializer (serializers.ModelSerializer):
    user = serializers.SlugRelatedField(slug_field = 'user')
    partial = True

    class Meta:
        model = Order

型号:

class User (models.Model):
    uid = models.CharField(max_length =200, unique=True)

class Order (models.Model):
    uid = models.ForeignKey (User, related_name = "orders", verbose_name = "User",blank=True, null=True)

2 个答案:

答案 0 :(得分:0)

您可以使用两个不同的ModelSerializer类,一个用于创建,确保在没有相关Order的情况下无法创建User对象,并且可以创建一个用于更新订单的对象,将required=False传递给相关字段的构造函数,以便您仍然可以保存没有相关User的现有订单。

答案 1 :(得分:0)

尝试将 default = None 添加到models.ForeignKey声明中。您也可以在users表中创建一个匿名用户,如果未指定用户,则可以设置匿名用户。