标签: serializer

将请求上下文从Django Rest Framework中的Viewset传递给序列化程序

我有一种情况,其中序列化器字段的值取决于当前登录用户的身份.我已经看到了在初始化序列化程序时如何将用户添加到上下文中,但是我不确定在使用ViewSet时如何执行此操作,因为您只提供序列化程序类而不是实际的序列化程序实例.

基本上我想知道如何去:

class myModelViewSet(ModelViewSet):
   queryset = myModel.objects.all()
   permission_classes = [DjangoModelPermissions]
   serializer_class = myModelSerializer
Run Code Online (Sandbox Code Playgroud)

至:

class myModelSerializer(serializers.ModelSerializer):
    uploaded_by = serializers.SerializerMethodField()
    special_field = serializers.SerializerMethodField()

    class Meta:
        model = myModel

    def get_special_field(self, obj):
        if self.context['request'].user.has_perm('something.add_something'):
           return something
Run Code Online (Sandbox Code Playgroud)

很抱歉,如果它是不明确的,从文档: 添加额外的Context 它说做

serializer = AccountSerializer(account, context={'request': request})
serializer.data
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从视图集自动执行此操作,因为我只能更改序列化程序类,而不是序列化程序实例本身.

django serializer django-rest-framework

51
推荐指数
2
解决办法
3万
查看次数

django rest framework:从序列化器validate()方法设置字段级错误

我有一个序列化程序,根据其他字段的值验证字段,在错误响应中,我想将每个字段错误显示为字段错误,而不是显示"non_field_errors"下的所有内容,如果我要提高的话会发生什么对象级验证方法中的ValidationError.下面是我想要实现的目标的说明:

MySerializer(ModelSerializer):
    ...
    def validate(self, data):
        field_val1 = data['field_val1']
        field_val2 = data['field_val2']
        if not self._is_field_valid(field_val1, field_val2):
            # The below line is how I would do what I want with Django
            # Forms, however, it's not valid in DRF
            self._errors['field_val1'] = 'this field is not valid'
Run Code Online (Sandbox Code Playgroud)

所需的错误响应是:

{'field_val1': ['this field is not valid']}
Run Code Online (Sandbox Code Playgroud)

django serializer django-rest-framework

33
推荐指数
1
解决办法
1万
查看次数

使用JMS Serializer时禁用Doctrine 2延迟加载?

我在我的Zend项目中使用Doctrine 2 ORM,并且需要在几种情况下将我的实体序列化为JSON.

ATM我使用Querybuilder并加入我需要的所有表.但是我的序列化程序导致学说延迟加载每个相关的实体,导致相当大的数据量并引发递归.

现在我正在寻找一种完全禁用Doctrines延迟加载行为的方法.

我选择数据的方法如下:

$qb= $this->_em->createQueryBuilder()
            ->from("\Project\Entity\Personappointment", 'pa')
            ->select('pa', 't', 'c', 'a', 'aps', 'apt', 'p')
            ->leftjoin('pa.table', 't')
            ->leftjoin('pa.company', 'c')
            ->leftjoin('pa.appointment', 'a')
            ->leftjoin('a.appointmentstatus', 'aps')
            ->leftjoin('a.appointmenttype', 'apt')
            ->leftjoin('a.person','p')
Run Code Online (Sandbox Code Playgroud)

我希望我的结果集只包含选定的表和关联.

任何帮助将不胜感激.

php doctrine serializer jmsserializerbundle

15
推荐指数
2
解决办法
1万
查看次数

XMLSerializer到XElement

我一直在使用数据库LINQ中的XML,并发现使用序列化器非常困难.

数据库LINQ需要一个存储的字段XElement.

我有一个复杂的对象有很多自定义的结构类,所以我想使用XmlSerializer来序列化对象.

但是,序列化程序只能序列化为文件("C:\ xxx\xxx.xml")或内存流.

但是要将它转换或序列化为XElement,以便我可以使用LINQ存储在数据库中?

以及如何做到相反?即反序列化XElement ...

.net c# xml linq serializer

14
推荐指数
2
解决办法
9889
查看次数

Symfony 3.2检测到循环引用(配置限制:1)

我的项目中有这两个实体

class PoliceGroupe
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="code", type="string", length=50)
     */
    private $code;

    /**
     * @ORM\ManyToMany(targetEntity="PointVente", inversedBy="policegroupe")
     * @ORM\JoinTable(name="police_groupe_point_vente",
     *      joinColumns={@ORM\JoinColumn(name="police_groupe_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="point_vente_id", referencedColumnName="id")}
     *      )
     */
    private $pointVente;
    /**
     * Constructor
     */
    public function __construct($produit)
    {
       $this->pointVente = new \Doctrine\Common\Collections\ArrayCollection();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的另一个实体

class PointVente
{
    /**
     * @var string
     *
     * @ORM\Column(name="abb", type="string", length=50)
     */
    private $abb;

    /**
     * …
Run Code Online (Sandbox Code Playgroud)

serializer symfony symfony-3.2

14
推荐指数
2
解决办法
2万
查看次数

莫西在科特林无视领域

我想知道在使用Moshi时如何忽略Kotlin类字段.

我找到了这个Java(Moshi忽略字段)的答案,它表明使用关键字transient如下

private transient String your_variable_name;
Run Code Online (Sandbox Code Playgroud)

但我找不到在Kotlin完成这项工作的正确方法.

json ignore serializer kotlin moshi

14
推荐指数
1
解决办法
3323
查看次数

如何在没有启动对象的情况下获取类的类型?

System.Xml.Serialization.XmlSerial的consturctor需要我要序列化的类的类型.

instance = New AnyClass()
Dim xmlszer As New XmlSerializer(instance.GetType)
Run Code Online (Sandbox Code Playgroud)

没问题.但是如何在不启动的情况下获得AnyClass的类型?

vb.net class serializer

13
推荐指数
2
解决办法
2万
查看次数

是否有.net的序列化器将输出c#代码?

我正在寻找一个可以获取实例的序列化程序,并将其序列化为一个包含c#代码的字符串,表示图形的内容.该类的功能类似于SerializeObjectJSON.NET.

我知道只有一组非常狭窄的结构可以使用,但我感兴趣的结构非常简单,他们会这样做.

如果有人知道具有类似功能的Visual Studio Visualizer,则可获得奖励积分.

编辑: 输出将在编译时在不同的应用程序中使用.我不需要在运行时反序列化输出(c#代码),它会保存到文件中进行分析.

var foo = new Foo() { Number = 1, Bar = new Bar() { Str = "Bar"}};
string sourceCode = Magic.SerializeObject(foo);
Run Code Online (Sandbox Code Playgroud)

输出:

Foo obj = new Foo();
obj.Number = 1;
obj.RefType = null; // infer this
obj.Bar = new Bar();
obj.Bar.Str = "Bar";
Run Code Online (Sandbox Code Playgroud)

.net c# serializer

13
推荐指数
1
解决办法
273
查看次数

Django REST Serializer方法可写字段

我正在阅读Django REST Framework,我有一个使用SerializerMethodField()与getter序列化的模型.

但是,当我POST到此端点时,我希望能够设置此字段,但这不起作用,因为正如上面的文档所示,您无法写入SerializerMethodField.Django REST中是否有任何方法可以为您定义自定义getter方法的序列化器字段,以及自定义setter方法?

编辑:这是我正在尝试做的事情的来源.客户与用户具有一对一的关系.

class ClientSerializer(serializers.ModelSerializer):
    email = serializers.SerializerMethodField()

    def create(self, validated_data):
        email = validated_data.get("email", None) # This doesn't work because email isn't passed into validated_data because it's a readonly field
        # create the client and associated user here


    def get_email(self, obj):
        return obj.user.email

    class Meta:
        model = Client
        fields = (
            "id",
            "email",
        )
Run Code Online (Sandbox Code Playgroud)

django rest serializer django-rest-framework

12
推荐指数
3
解决办法
5541
查看次数

使用自定义非规范化器对嵌套对象进行Symfony 2非规范化

在这里,我正在为REST API构建Symfony SDK.大多数数据都是具有嵌套的其他JSON对象的JSON对象.像这儿

{
    "id": "eng_pl",
    "name": "Premier League",
    "_links": {
        "self": {
            "href": "/tournaments/eng_pl"
        },
        "seasons": {
            "href": "/tournaments/eng_pl/seasons/"
        }
    },
    "coverage": {
        "id": "eng",
        "name": "England",
        "_links": {
            "self": {
                "href": "/territories/eng"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

反序列化必须生成一个与下面列出的代码生成的对象相等的对象:

$tournament = new Tournament();
$tournament->setId('eng_pl');
$tournament->setName('Premier League');

$coverage = new Territory();
$coverage->setId('eng');
$coverage->setName('England');

$tournament->setCoverage($coverage);
Run Code Online (Sandbox Code Playgroud)

我正在使用我自己的自定义Denormalizers,在Tournament对象的denormalizer代码片段下面:

class TournamentDenormalizer implements DenormalizerInterface
{

    /**
     * @inheritdoc
     */
    public function supportsDenormalization($object, $type, $format = null)
    {

        if ($type != Tournament::class) {
            return false;
        } …
Run Code Online (Sandbox Code Playgroud)

php json serializer symfony

12
推荐指数
1
解决办法
1938
查看次数