Python django rest框架在create中动态设置外键

Python django rest框架在create中动态设置外键,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个模型: class Foo(models.Model) field1 = CharField(max_length=24) capacity = models.IntegerField(default=10) def used(self): return self.bar_set.count() def is_available(self): return self.capacity - self.used() @staticmethod

我有一个模型:

class Foo(models.Model)
  field1 = CharField(max_length=24)
  capacity = models.IntegerField(default=10)

  def used(self):
      return self.bar_set.count()

  def is_available(self):
      return self.capacity - self.used()

  @staticmethod
  def get_or_create_foo(req_count=0):
      foos = list(Foo.objects.all())
      for foo in foos:
          if foo.available() >= req_count:
              return foo
      else:
          foo = Foo() 
          foo.save()
          return foo

class Bar(models.Model)
  field1 = models.CharField(max_length=24)
  field1 = models.CharField(max_length=24)
  foo = models.ForeignKey(Foo)
现在我有了如下序列化程序:

class FooSerializer(models.ModelSerializer)
  class Meta:
      model = models.Foo

class BarSerializer(models.ModelSerializer)
  count = models.IntegerField()
  field1 = models.CharField(max_length=24)
  foo = models.ForeignKey(Foo)


  class Meta:
      model = models.Bar

  def create(self, validated_data):
      instance = super(BarSerializer, self).create(validated_data)
      instance.foo = Foo.get_or_create_foo(validated_data['count'])
      instance.save()
      return instance
问题是
instance=super(Bar,self)。在此行中创建(已验证的\u数据)
,异常:

Traceback (most recent call last):
  File "/home/webmaster/prj/venv/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/home/webmaster/prj/venv/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 318, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: app_bar_foo_id
传递给BarSerializer的数据如下所示(注意,此处不发送foo,因为它需要动态填充):


我想,因为调用super会创建一个实例并保存它,而不使用FK,因为它没有在请求中传递并且失败,所以当使用
BarSerializer
实例化它时,在Bar中填充字段
foo
的方法是什么调用
create()
,我会这样做

def create(self, validated_data):
    instance = BarSerializer(**validated_data)
    instance.foo = Foo.get_or_create_foo(validated_data['count'])
    instance.save()
    return instance
def create(self, validated_data):
    instance = BarSerializer(**validated_data)
    instance.foo = Foo.get_or_create_foo(validated_data['count'])
    instance.save()
    return instance