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.ModelRe source):
...
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','f irsts') в InheritedModelResource как все внезапно заработало так как мне надо и без лишних костылей в obj_create. Только с авторизацией ботва какая-то, но это уже совсем другая история.
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.ModelRe
...
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','f
