我试图在我的Django数据库中存储用户可修改的排序,并通过Django Rest Framework读取/写入。
我在Django中找到了令人敬畏的order_with_respect_to
来在Django中对此进行建模。以下是Rest Framework文档中的示例,其中修改了此功能以显示此功能:
class Album(models.Model):
album_name = models.CharField(max_length=100)
class Track(models.Model):
album = models.ForeignKey(Album, related_name='tracks')
class Meta:
order_with_respect_to = 'album'
这会将排序存储到后端的_order
字段中,并允许在Album对象上读取/写入Track顺序:
>>> album = Album.objects.get(id=1)
>>> album.get_track_order()
[3604L, 3605L, 3606L, 3608L, 3607L]
>>> album.set_track_order([3607L, 3606L, 3605L, 3608L, 3604L]
什么是优雅的制作方法" track_order"在Album的其余界面中可访问(读/写)?
基本上我正在寻找ModelGetterSetterMethodField
(a ModelField
可以访问模型属性,但不能通过get / set函数)或RelatedOrderingField
了解Django {{ 1}}模式并使用相关的函数来读/写对象。
到目前为止,我尝试使用order_with_respect_to
(适用于阅读,写作失败:SerializerMethodField
是只读的)并制作自定义SerializerMethodFields
(很适合阅读(返回) RelatedOrderingField
函数中的obj.get_track_order()
,写入失败,因为在to_representation()
函数中我无法访问该对象,因此我不知道如何调用{{ 1}}。