?

Log in

No account? Create an account
 
 
21 Май 2016 @ 23:30
Tastypie и унаследованные модели  
Привет,

tl;dr
В родительской модели есть М2М поле, при создании дочерней оно не заполняется.


Есть у меня три модельки:

class FirstModel(models.Model):
  ...

class BaseModel(models.Model):
  firsts = models.ManyToManyField(FirstModel, related_name="base")
  name = models.CharField()
  ...

class InheritedModel(BaseModel):
  ...

Есть еще ресурс:

class InheritedModelResource(resources.ModelResource):
  ...

  def hydrate_firsts(self, bundle):
    здесь из идентификаторов в запросе получаю queryset, который потом подсовываю в bundle

Пытаюсь я POST'ануть на этот ресурс что-то вроде {"name": "xxxxtrtr", "firsts":"22"}. В результате создаются записи для InheritedModel и BaseModel, но без ManyToManyField, который мне прям как воздух необходим. Более того, в hydrate_firsts tastypie даже не заглядывает, если судить по логгеру.

Пробовал ради интереса создать ресурс для BaseModel, указать на него из InheritedModelResource и определить hydrate_firsts там, однако, судя по логгеру, tastypie и туда не добрался.

Я конечно сделал все как хотел через obj_create для InheritedModelResource, но как-то это уродливо, что ли. Может, подскажет кто как такие вещи делать правильно?


UPD Все оказалось просто - я почему-то уверовал, что эти м2м отношения являются свойством только BaseModel, стоило мне добавить соответствующее поле firsts = fields.ToMAny('...FirstModelResource','firsts') в InheritedModelResource как все внезапно заработало так как мне надо и без лишних костылей в obj_create. Только с авторизацией ботва какая-то, но это уже совсем другая история.