小编qwe*_*rtp的帖子

AssertionError:`HyperlinkedIdentityField`需要序列化程序上下文中的请求

我想建立一种many-to-many关系,一个人可以在许多俱乐部,一个俱乐部可以有很多人.我加入了models.py,并serializers.py为下面的逻辑,但是当我试图序列化在命令提示符下,我碰到下面的错误-我是什么错在这里做什么?我连一个都没有HyperlinkedIdentityField

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\user\corr\lib\site-packages\rest_framework\serializers.py", line 503, in data
ret = super(Serializer, self).data
File "C:\Users\user\corr\lib\site-packages\rest_framework\serializers.py", line 239, in data
self._data = self.to_representation(self.instance)
File "C:\Users\user\corr\lib\site-packages\rest_framework\serializers.py", line 472, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "C:\Users\user\corr\lib\site-packages\rest_framework\relations.py", line 320, in to_representation"the serializer." % self.__class__.__name__
AssertionError: `HyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer.
Run Code Online (Sandbox Code Playgroud)

models.py

class Club(models.Model):
    club_name = models.CharField(default='',blank=False,max_length=100)

class Person(models.Model): …
Run Code Online (Sandbox Code Playgroud)

python django django-views django-serializer django-rest-framework

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

python如何在赋值运算符后赋值

好吧,我确定这是一个非常愚蠢的问题.但是python如何为变量赋值?

假设有一个变量a并赋值a=2.因此python为变量分配一个内存位置,a现在指向包含该值的内存位置2.现在,如果我分配一个变量b=a,变量b也指向与变量相同的位置a.

现在.如果我分配一个变量,c=2它仍指向相同的内存位置,a而不是指向一个新的内存位置.那么,python是如何工作的?它是否首先检查所有先前分配的变量,以检查它们中的任何一个是否共享相同的值,然后为其分配内存位置?

此外,它与列表的工作方式不同.如果我分配a=[2,3]然后b=[2,3]使用该id功能检查他们的内存位置,我会得到两个不同的内存位置.但是c=b给了我相同的位置.有人可以解释正确的工作和原因吗?

编辑: -

基本上我的问题是因为我刚开始学习is运算符,显然True只有当它们指向同一个位置时它才会成立.所以,如果a=1000b=1000 a is bFalse,但a="world" b="world"它也是如此.

python python-2.7 python-3.x python-internals

8
推荐指数
1
解决办法
2038
查看次数

在 django 模板中格式化日期

{{ test.date}}我的模板以以下格式呈现标签-

2015-12-15T23:55:33.422679

当我尝试使用 django 的内置模板标记对其进行格式化时date,它不显示任何内容。

我尝试过的变体:

{{ test.date|date:"SHORT_DATE_FORMAT" }}

{{ test.date|date:"D d M Y" }}

模型.py:

class Human(models.Model):
    name = models.CharField(max_length=50,default='',blank=False)


class Test(models.Model):
    human = models.ForeignKey(Human)
    date = models.DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

视图.py:

def list(request):
    h = Human.objects.all()
    s=[]
    for her in h: 
        t = h.test_set.all()
        s.extend(t)
    context = RequestContext(request, {'test_list': s,})
    return render_to_response('template.html', context)
Run Code Online (Sandbox Code Playgroud)

然后我在模板中使用它,如下所示:

{% for test in test_list %}
     {{test.date}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

django django-templates django-template-filters

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

尝试获取序列化器上字段的值时出现 AttributeError

尝试在 django 中建立manytomany关系,但出现以下错误 -

尝试获取序列化器 GenreSerializer 上的字段值时出现 AttributeError name。序列化程序字段可能命名不正确,并且与 Movie 实例上的任何属性或键不匹配。原始异常文本是:“电影”对象没有属性“名称”。

这里有一个类似的答案推荐设置many=True,但它不起作用 - 尝试获取字段值时出现属性错误

模型.py

class Genre(models.Model):
  name = models.CharField(max_length=255,unique=True)

  def __unicode__(self):
    return self.name

class Movie(models.Model):
  mname = models.CharField(max_length=255)
  genres = models.ManyToManyField(Genre,related_name='movies')

  def __unicode__(self):
    return self.mname
Run Code Online (Sandbox Code Playgroud)

序列化器.py

class GenreSerializer(serializers.ModelSerializer):
  class Meta:
    model = Genre
    fields = ('name','id')

class MovieSerializer(serializers.ModelSerializer):
  genres = GenreSerializer(many=True, read_only=True)    

  class Meta:
    model = Movie
    fields = ('id','genres','mname')
Run Code Online (Sandbox Code Playgroud)

urls.py

urlpatterns = [
url(r'^genres/$', views.GenreList.as_view()),
url(r'^genres/(?P<pk>[0-9]+)$', views.GenreDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)
Run Code Online (Sandbox Code Playgroud)

视图.py

class …
Run Code Online (Sandbox Code Playgroud)

python django django-serializer django-rest-framework

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

在 django Rest 框架中添加 IsAuthenticatedOrReadOnly 权限

假设我有以下模型 -

class Person(models.Model):
    name = models.CharField(max_length=200)
    clubs = models.ManyToManyField(Club,related_name = 'people')
    date = models.DateTimeField(default=datetime.now)
    
    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

用于创建rest api。

views.py

class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = PersonSerializer

    def get_object(self):
        person_id = self.kwargs.get('pk',None)
        return Person.objects.get(pk=person_id) 
Run Code Online (Sandbox Code Playgroud)

如何添加权限,以便只有经过身份验证的用户才能从 api 中的人员列表添加、更新、删除或检索对象。以及非授权用户的只读权限。我尝试浏览文档,但这一切都非常令人困惑。有人可以解释一下吗?

python django rest django-views django-rest-framework

5
推荐指数
1
解决办法
5345
查看次数