我正在使用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)
答案 0 :(得分:0)
您可以使用两个不同的ModelSerializer
类,一个用于创建,确保在没有相关Order
的情况下无法创建User
对象,并且可以创建一个用于更新订单的对象,将required=False
传递给相关字段的构造函数,以便您仍然可以保存没有相关User
的现有订单。
答案 1 :(得分:0)
尝试将 default = None 添加到models.ForeignKey声明中。您也可以在users表中创建一个匿名用户,如果未指定用户,则可以设置匿名用户。