我试图创建一个IFormatProvider
可以识别DateTime对象的自定义格式字符串的实现.这是我的实现:
public class MyDateFormatProvider : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return this;
}
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if(arg == null) throw new ArgumentNullException("arg");
if (arg.GetType() != typeof(DateTime)) return arg.ToString();
DateTime date = (DateTime)arg;
switch(format)
{
case "mycustomformat":
switch(CultureInfo.CurrentCulture.Name)
{
case "en-GB":
return date.ToString("ddd dd MMM");
default:
return date.ToString("ddd MMM dd");
}
default:
throw new FormatException();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在这样的DateTime.ToString(string format, IFormatProvider provider) …
我在一个API项目中使用Django Rest Framework,并试图弄清楚是否有一种方法可以使用两个不同的序列化程序与通用视图(例如CreateAPIView).我想使用一个序列化程序来反序列化POST请求,而另一个序列化程序用于序列化生成的响应.
这就是我想要做的; 我将使用文档中的Album/Track示例进行说明:
我正在使用的模型具有ForeignKey关系.在API中,我希望能够在分配关系时在请求中包含FK,因此在序列化程序中我使用的是PrimaryKeyRelatedField,类似于AlbumSerializer处理与轨道的关系的方式:
class CreateAlbumSerializer(serializers.ModelSerializer):
tracks = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
Run Code Online (Sandbox Code Playgroud)
但是,在回复中,我想使用ModelSerializer包含相册的完整表示,而不仅仅是PK,slug等,如下所示:
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = ('order', 'title', 'duration')
Run Code Online (Sandbox Code Playgroud)
通用DRF视图允许您指定serializer_class
或覆盖get_serializer_class
方法,但我无法弄清楚如何使用它来完成我所追求的目标.
有什么明显的东西让我失踪吗?这似乎是一件合理的事情,但我似乎无法理解如何完成它.