我想建立一种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
好吧,我确定这是一个非常愚蠢的问题.但是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=1000和b=1000 a is b是False,但a="world" b="world"它也是如此.
{{ 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 中建立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) 假设我有以下模型 -
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 中的人员列表添加、更新、删除或检索对象。以及非授权用户的只读权限。我尝试浏览文档,但这一切都非常令人困惑。有人可以解释一下吗?