Owner_id不能为null。 DRF关系数据库

时间:2017-05-26 06:41:20

标签: python mysql django

我正在与数据库中的表建立关系。目前我有3个表的教程。例如(auth_user表,partyEvent表,朋友表)。

现在用户应该只能创建一个partyEvent。朋友可以加入由用户创建的任意数量的partyEvent。 Friends模型中的所有者ID告​​诉partyEvent和User'朋友'属于。

我可以限制用户只创建一个partyEvent。但是当我尝试将朋友注册到partyEvent时,不会发送所有者的ID。而是默认值:

owner = models.OneToOneField('auth.User', related_name = 'party', on_delete=models.CASCADE, default='1')
而是发送

。为什么会这样?

模型

class PartyEvent(models.Model):
    name = models.CharField(max_length=100, blank=False)
    location = models.CharField(max_length=100, blank=False)
    owner = models.OneToOneField('auth.User', related_name = 'party', on_delete=models.CASCADE, default='1')

class Friends(models.Model):
    name = models.CharField(max_length=100, blank=False)
    owner = models.ForeignKey('auth.User',related_name = 'friends', on_delete=models.CASCADE, default='1')

串行

class FriendsSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.id')
    class Meta:
        model = Friends
        fields = ('id','name','owner')

2 个答案:

答案 0 :(得分:0)

您在序列化程序模型中有ReadOnlyField,这意味着序列化对象将在DB中发布时排除所有者字段。

答案 1 :(得分:0)

您遇到问题的原因是,序列化程序中的ReadOnlyField只会包含在数据检索中。通过序列化程序发布数据时,将排除ReadOnlyFields。

要解决您的问题,请尝试此操作,

class FriendsSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
    class Meta:
        model = Friends
        fields = ('id','name','owner')