Python 违反非空约束。尝试在Django RestFramework中发布时使用ForeighKey(非用户)

Python 违反非空约束。尝试在Django RestFramework中发布时使用ForeighKey(非用户),python,django,django-rest-framework,Python,Django,Django Rest Framework,这个问题在整个互联网上都有评论,但我不知道为什么,它几乎总是与用户有关 在我的例子中,问题不在于用户 我有这个模型: class DocumentDetail(models.Model): date = models.DateTimeField(_('date'), auto_now_add=True) note = models.TextField(_('note'), blank=True) checked = models.BooleanField(_('check

这个问题在整个互联网上都有评论,但我不知道为什么,它几乎总是与用户有关

在我的例子中,问题不在于用户

我有这个模型:

class DocumentDetail(models.Model):
    date = models.DateTimeField(_('date'), auto_now_add=True)
    note = models.TextField(_('note'), blank=True)
    checked = models.BooleanField(_('checked'), default=False)
    details_sample = models.ForeignKey(DocumentDetailSample, related_name='details_sample',
                                       verbose_name=_("details_sample"), blank=False)
    user_id = models.ForeignKey(User, related_name='document_user_id', verbose_name=_('document_user_id'), blank=False)

    class Meta:
        ordering = ('date',)
我可以在其中使用DocumentDetailSample字段

问题是,对于用户,我可以这样做:

def perform_create(self, serializer):
    serializer.save(user_id=self.request.user)

def perform_update(self, serializer):
    serializer.save(user_id=self.request.user)
但是对于
details\u sample
来说,应该是文章中传递的东西,因为我不知道应该是哪个“details\u sample”

这就是为什么我认为我可以在帖子正文中传递
id

{
    "note" : "Oh, nice",
    "checked": "True",
    "details_sample": "1"
}
但我得到了这个错误:

django.db.utils.IntegrityError:列中的值为null “详细信息\u示例\u id”违反了非空约束详细信息:行失败 包含(92017-01-2414:43:58.75642+00,哦,不错,t,2,空)

因此,除了细节样本外,其他一切都起了作用(

这一排是:

"1";"2017-01-24 14:40:37.881802+01";"Life is beautiful";"''";"1";"The life is beautiful. And there's also a movie";"This is about life";"{"name": "Chuck", "phone": "123"}"
有人知道我能做什么吗

编辑

这是我的序列化程序:

class DocumentDetailSerializer(serializers.ModelSerializer):
    title = serializers.ReadOnlyField(source='details_sample.title')
    icon = serializers.ReadOnlyField(source='details_sample.icon')
    priority = serializers.ReadOnlyField(source='details_sample.priority')
    description = serializers.ReadOnlyField(source='details_sample.description')
    prefix = serializers.ReadOnlyField(source='details_sample.prefix')
    advertise = serializers.ReadOnlyField(source='details_sample.advertise')

    class Meta:
        model = DocumentDetail
        fields = (
            'url', 'id', 'date', 'icon', 'checked', 'priority', 'title', 'note', 'description', 'prefix', 'advertise'
        )

我可以在管理站点上完成,但是在那里我可以“使用”整个实例。问题是POST.GET也可以很好地工作。

我在视图集中解决了这个问题

    def perform_create(self, serializer):
    serializer.save(
        details_sample=DocumentDetailSample.objects.filter(Q(id=self.request.data['details_sample']))[0],
        user_id=self.request.user)

它不漂亮,但很管用。如果有人知道更好的方法,请告诉我。

我在视图集中写下了这个问题

    def perform_create(self, serializer):
    serializer.save(
        details_sample=DocumentDetailSample.objects.filter(Q(id=self.request.data['details_sample']))[0],
        user_id=self.request.user)

它并不漂亮,但很有效。如果有人知道更好的方法,请告诉我。

您的序列化程序中没有任何
详细信息\u示例
字段,因此它只是从数据中丢弃。

您的序列化程序中没有任何
详细信息\u示例
字段,因此它只是从数据中丢弃。

您的序列化是什么呃看起来怎么样?就是这样。谢谢你的回答:)你的序列化程序看起来怎么样?就是这样。谢谢你的回答:)不,这是真的:)我测试了一下,看看。这是正确的。谢谢它检测到,这是一个实例,即使我只写了一个Int。再次感谢!不,这是真的:)我测试了一下,看看。这是正确的。谢谢它检测到,这是一个实例,即使我只写了一个Int。再次感谢!