18

サーバー側とクライアント側の両方で、tastypie FileField を使用する完全な例を教えてください。

これが私が試したことです:

#models.py
class Foo(models.Model):
    img = models.ImageField(upload_to="images", null=True, blank=True)
    body = models.CharField()

#api.py
class FooResource(ModelResource):
    img = fields.FileField(attribute="image", null=True, blank=True)
    class Meta:
        queryset = Foo.objects.all()

たとえば、curl を使用して foo オブジェクトを作成しようとすると、

>>> curl -F "body=test" -F "img=@local_img.png" http://localhost:8000/api/0.1/foo/

foo オブジェクトは正常に作成されましたが、imgフィールドは null です。デバッガーで、バンドル オブジェクトを保存すると、オブジェクトを含む img フィールドが実際にあることがわかりますInMemoryUploadedFile。そのため、リクエストはおそらく問題ありません。私はどこで間違っていますか?コード スニペットは大歓迎です。

4

1 に答える 1

22

リソースは次のようになります。

class FooResource(ModelResource):
    img = fields.FileField(attribute="img", null=True, blank=True)
    class Meta:
        queryset = Foo.objects.all()

attributeモデルのフィールドに対応している必要があります。ドキュメントに記載されているように:

ApiField。属性

リソースによってラップされたオブジェクトのインスタンス属性に名前を付ける文字列。

于 2012-09-12T07:42:50.890 に答える