我有一个序列化器:
class InterestSerializer(serializers.ModelSerializer):
category = serializers.RelatedField()
class Meta:
model = Importance
fields = ('id', 'category', 'is_important')
为模型:
class Importance(models.Model):
profile = models.ForeignKey("Profile")
category = models.ForeignKey(InterestCategory)
is_important = models.BooleanField(default=True)
class Meta:
unique_together = ('profile', 'category')
def __unicode__(self):
return self.category.name
我通过ajax进行简单的POST来更新模型。我可以确认发布的数据是否正确:
POST:
csrfmiddlewaretoken = u'ts0PEgLZIqkeOXp2a7z8Ex5eSbvGFOi3'
is_important = u'False'
id = u'2'
但是,如果我检查序列化中的数据,则会有所不同:
if request.method == "POST":
serializer = InterestSerializer(data=request.DATA)
if serializer.is_valid():
print serializer.data
在终端
{'id': None, 'category': None, 'is_important': False}
为什么不将id(pk)加载到序列化数据中?
编辑:
<form id="{{ interest.pk }}">{% csrf_token %}
<input type='hidden' name='id' value='{{ interest.pk }}'>
<label class="radio-inline">
<input type="radio" name="is_important" value="True"> Use
</label>
<label class="radio-inline">
<input type="radio" name="is_important" value="False"> Don't Use
</label>
</form>
<script>
$('input[type=radio]').click(function() {
$.post("/api/categories", ($(this).closest("form").serialize()));
});
</script>
答案 0 :(得分:0)
Django将忽略您的id
参数。 id
字段是自动增量主键,仅在保存对象后才可用。您的代码应该像这样改变:
if request.method == "POST":
serializer = InterestSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
print serializer.data
答案 1 :(得分:0)
我知道它有几年了,但无论如何我都会回答。
要进行更新,您实际上必须这样做:
InterestSerializer(instance=<instance to update>, data=<data dict>)
重要的是,我们无需在请求正文中设置id
。
关于500状态代码,您必须向我们展示更多详细信息,例如显示的消息,追溯等。