Обратная связь Django/Tastypie не работает

Я пытаюсь сохранить и вставить данные в 2 связанные таблицы с помощью одного POST запроса, используя Tastypie.

Я отправляю вложенный JSON, который получает мой ресурс Restaurents. Этот ресурс затем вставит данные в Staff и создаст отношение OneToMany.

Ресурсы

class RestaurantResource(ModelResource):
    staff = fields.ToManyField('api.resources.StaffResource', attribute='staff_set',
                                          related_name='staff_fk', blank=True,
                                          null=True, full=True)

class Meta:
    authorization = Authorization()
    queryset = Restaurant.objects.all()
    resource_name = "staff"
    allowed_methods = ['get', 'post', 'patch', 'put']

def full_hydrate(self, bundle, for_list=False):
    initObj = Deserializers.buildResource(self, bundle, "initialisation")
    # Fetches each field from nested JSON and puts it into python object, so I can assign them to bundle.obj
    # Fields for Staff table
    bundle.obj.Name = initObj.Name
    bundle.obj.Gender = initObj.gender
    # Fields for Restaurant table
    bundle.obj.Postcode = initObj.postcode
    bundle.obj.Capacity = initObj.capacity
    return bundle
    
def obj_create(self, bundle, **kwargs):
    set_info_obj = self.full_hydrate(bundle)
   
    set_info_obj.obj.save()
    # Here I'm expecting both tables to be populated with data. However, just Restaurant is populated.
    return bundle

class StaffResource(ModelResource):
    staff_fk = fields.ToOneField(RestaurantResource, 'staff_fk')

    class Meta:
        queryset = Staff.objects.all()

Модели

class Restaurant(models.Model):
    RestaurantID = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    Postcode = models.CharField(max_length=200)
    Capacity = models.CharField(max_length=200)
    # objects = InheritanceManager()

class Staff(models.Model):
    StaffID = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    Name = models.CharField(max_length=200)
    Gender = models.CharField(max_length=200)
    RestaurantID = models.ForeignKey(SetInfo, on_delete=models.SET_DEFAULT, default=1, related_name='staff_fk')

Я отправляю JSON с запросами и получаю ошибку:

simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Вот мой код, который отправляется на сервер:

def sendToDB(jsonData):
    import requests
    url = "http://43.197.102.4:8100/api/v1/set_info/"

    jsonData = {
        "Restaurant": {
            "Postcode": "AAABBBCCC",
            "Capacity": 25.
        }
        "Staff": {
            "Name": "Hans Zimmer",
            "Gender": "Male"
        }
    }

    print(json.dumps(jsonData, indent=4))

    r = requests.post(url, json=json.dumps(jsonData))
    r.json()
    print(r)
    # This is printing the JSON error

РЕДАКТИРОВАНИЕ:

Я могу сделать это:

def obj_create(self, bundle, **kwargs):
    restaurant = Restaurant()
    restaurant_created = restaurant.objects.create(bundle.obj.Postcode, bundle.obj.Capacity)
    staff = Staff()
    staff.objects.create(RestaurantID=restaurant_created.StaffID, bundle.obj.Name, bundle.obj.Gender)
    return bundle

Но при этом игнорируется цикл гидратации/дегидратации TastyPie, так как он просто использует .create от Django. Будет ли это хорошей практикой?

Вернуться на верх