相关疑难解决方法(0)

QueryDict和MultiValueDict有什么区别?

我想在django项目中将dict转换为QueryDict.链接夫妇存在来解释这个(Django的:我可以从字典中创建的QueryDict?并且如何改变一个Django的QueryDict到Python字典?).这是我要翻译的简单字典abc = {'a': 1, 'b':[1,2,3]}.我试过这种方法:

from django.http import QueryDict
from django.utils.datastructures import MultiValueDict
abc = { 'a': 1, 'b':[1,2,3]}
mdict = MultiValueDict(abc)
qdict = QueryDict(mdict)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误跟踪

/usr/lib/python2.7/urlparse.pyc in parse_qsl(qs, keep_blank_values, strict_parsing)
407     Returns a list, as G-d intended.
408     """
409     pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
410     r = []
411     for name_value in pairs:
AttributeError: 'MultiValueDict' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

为什么会失败,我该如何完成?MultiValueDict和QueryDict之间有什么区别?

python django dictionary

6
推荐指数
1
解决办法
4768
查看次数

如何将request.POST转储到dict,以维护多个值字段?

我想将ModelForm数据存储在中的数据库中JSONField,以便以后可以根据此数据创建对象,只需调用:

form = ModelForm(data_from_jsonfield_as_querydict)
if form.is_valid():
    object = form.save()
Run Code Online (Sandbox Code Playgroud)

问题一:

我在POST中有数据:

>>> print request.POST
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}
Run Code Online (Sandbox Code Playgroud)

而且我必须将其转换QueryDictdict。但是,如果我打电话给request.POST.dict()我,我会失去字段2的列表值:

>>> print request.POST.dict()
{'field-1': 'value1', 'field-2': 'value-2b'}
Run Code Online (Sandbox Code Playgroud)

我尝试使用,request.POST.getlist但随后获得所有值作为列表:

>>> for k in request.POST.keys():
...     print request.POST.getlist(k)
[u'value1']
[u'value-2a', u'value-2b']
Run Code Online (Sandbox Code Playgroud)

我什至无法检查上述循环中的给定值是否为列表实例,因为request.POST.get(k)如果值是list且另一方面针对每个字段request.POST[k]返回MultiValueDictKeyError,则不返回错误。

我想到的唯一解决方案是循环遍历所有获得的字段getlist()并将一值列表转换为字符串,但是在我看来,这似乎有点过分。

问题2:

假设问题1已解决,并且我已经dict将表单数据存储在数据库中,如下所示:

# object.data
{u'field-1': u'value1', u'field-2': [u'value-2a', u'value-2b']}
Run Code Online (Sandbox Code Playgroud)

当我想使用上述内容dict作为表单数据创建对象时,我必须将其转换为do QueryDict,这可以通过以下方式简单地完成:

querydict = QueryDict('', …
Run Code Online (Sandbox Code Playgroud)

python django dictionary

5
推荐指数
2
解决办法
7271
查看次数

此QueryDict实例是不可变的

我有一个带有外键帐户的分支模型(分支的所有者):

class Branch(SafeDeleteModel):
    _safedelete_policy = SOFT_DELETE_CASCADE
    name = models.CharField(max_length=100)
    account = models.ForeignKey(Account, null=True, on_delete=models.CASCADE)
    location = models.TextField()
    phone = models.CharField(max_length=20, blank=True,
                         null=True, default=None)
    create_at = models.DateTimeField(auto_now_add=True, null=True)
    update_at = models.DateTimeField(auto_now=True, null=True)

    def __str__(self):
        return self.name

    class Meta:
        unique_together = (('name','account'),)

    ...
Run Code Online (Sandbox Code Playgroud)

我有一个带有用户外键的帐户模型(一对一字段):

class Account(models.Model):
    _safedelete_policy = SOFT_DELETE_CASCADE
    name = models.CharField(max_length=100)
    user = models.OneToOneField(User)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name + ' - ' + self.create_at.strftime('%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

我为分支创建了ModelViewSet,它显示了登录用户拥有的分支:

class BranchViewSet(viewsets.ModelViewSet):
    serializer_class = BranchSerializer
    permission_classes = (permissions.IsAuthenticated,)


    def …
Run Code Online (Sandbox Code Playgroud)

django django-models django-rest-framework

5
推荐指数
4
解决办法
5184
查看次数

无法从 Django 的 QueryDict 中提取列表?

Django 1.7 Python 2.7

我有一个 QueryDict 对象(让我们命名它qd):

<QueryDict: {u'org': [u''], u'songs': [u'1', u'2'], u'user': [u'222'], u'name': [u'test_name']}>
Run Code Online (Sandbox Code Playgroud)

但我似乎无法获得“歌曲”的价值。

我试过了:

qd.get('songs')
qd['songs']
qd.__getitem__('songs')
Run Code Online (Sandbox Code Playgroud)

但他们都回来了u'2'

为什么我不能得到一个列表,看起来很琐碎?

python django

0
推荐指数
1
解决办法
884
查看次数