如何在DRF中发布关系字段

时间:2015-09-19 02:47:10

标签: django django-rest-framework

这是模型

foreach (var object in Objects)
{

  try{
      // check conditions
      // perform conversions on the data and assign to domain object.property
      //....
      //db.object.Add(object);
      //db.savechanges();

   }catch{

        //update log if the try fails   
   }
 }

这是序列化程序

class Event(models.Model):
    calendar = models.ForeignKey(Calendar)
    title = models.CharField()

class Calendar(models.Model):
    title = models.CharField()

然后我尝试在json下面发布以在日历class EventSerializer(models.Model): calendarId = serializers.CharField(source='calendar.id') class Meta: model = Event fields = ('id', 'title', 'calendarId') class CalendarSerializer(models.Model): class Meta: model = Calendar fields = ('id', 'title')

下创建一个事件
3b60a22c-d46e-46ca-b978-ec81a8b47fcb

失败并出现以下错误

  

ValueError:无法指定“{u'id”:   u'3b60a22c-d46e-46ca-b978-ec81a8b47fcb'}“:”Event.calendar“必须   是一个“日历”实例。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我假设你已经创建了类EventSerializer(serializers.ModelSerializer) - (但我的问题是你编写了EventSerializer(models.Model))。

无论如何,你应该发布你的数据:

{
    title:"abc",
    calendar:"3b60a22c-d46e-46ca-b978-ec81a8b47fcb"
}

如果不起作用,则应使用日历对象填充日历字段

 def create(self, request, format=None):
      calendarId = request.data.get("calendarId", None)
      calendar = Calendar.objects.get(id=calendarId)
      request.data["calendar"] = calendar
      ...
       ..
        .