我正在使用django rest框架来创建API.我有以下型号:
class Category(models.Model):
name = models.CharField(max_length=100)
def __unicode__(self):
return self.name
class Item(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, related_name='items')
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
要为我要做的类别创建一个序列化器:
class CategorySerializer(serializers.ModelSerializer):
items = serializers.RelatedField(many=True)
class Meta:
model = Category
Run Code Online (Sandbox Code Playgroud)
......这会为我提供:
[{'items': [u'Item 1', u'Item 2', u'Item 3'], u'id': 1, 'name': u'Cat 1'},
{'items': [u'Item 4', u'Item 5', u'Item 6'], u'id': 2, 'name': u'Cat 2'},
{'items': [u'Item 7', u'Item 8', u'Item 9'], u'id': 3, 'name': u'Cat 3'}]
Run Code Online (Sandbox Code Playgroud)
我如何从Item序列化器获得反向,即:
[{u'id': 1, 'name': 'Item 1', 'category_name': u'Cat …Run Code Online (Sandbox Code Playgroud) 我正在尝试打包我的项目以进行分发,但是RuntimeWarning当我运行模块时我正在尝试.
我在Python邮件列表上找到了一个错误报告,表明这RuntimeWarning是Python 3.5.2中引入的新行为.
阅读错误报告,似乎发生了双重导入,这RuntimeWarning在警告用户时是正确的.但是,我没有看到我需要对自己的项目结构进行哪些更改以避免此问题.
这是我试图"正确"构建的第一个项目.我希望在推送代码时有一个整洁的布局,以及一个可以被其他人轻松克隆和运行的项目结构.
我的结构主要基于http://docs.python-guide.org/en/latest/writing/structure/.
我在下面添加了最小工作示例的详细信息.
要复制该问题,我运行主文件python -m:
(py36) X:\test_proj>python -m proj.proj
C:\Users\Matthew\Anaconda\envs\py36\lib\runpy.py:125: RuntimeWarning:
'proj.proj' found in sys.modules after import of package 'proj', but prior
to execution of 'proj.proj'; this may result in unpredictable behaviour
warn(RuntimeWarning(msg))
This is a test project.`
Run Code Online (Sandbox Code Playgroud)
运行我的测试很好:
(py36) X:\test_proj>python -m unittest tests.test_proj
This is a test project.
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Run Code Online (Sandbox Code Playgroud)
复制问题的项目结构如下:
myproject/
proj/
__init__.py
proj.py
tests/
__init__.py …Run Code Online (Sandbox Code Playgroud) 我有一个名为Student的模型,它有一些字段,与用户的一个OneToOne关系(django.contrib.auth.User).
class Student(models.Model):
phone = models.CharField(max_length = 25 )
birthdate = models.DateField(null=True)
gender = models.CharField(max_length=1,choices = GENDER_CHOICES)
city = models.CharField(max_length = 50)
personalInfo = models.TextField()
user = models.OneToOneField(User,unique=True)
Run Code Online (Sandbox Code Playgroud)
然后,我有一个模型的ModelForm
class StudentForm (forms.ModelForm):
class Meta:
model = Student
Run Code Online (Sandbox Code Playgroud)
使用Meta类中的fields属性,我设法只显示模板中的一些字段.但是,我可以指出要显示的用户字段吗?
有点像:
fields =('personalInfo','user.username')
Run Code Online (Sandbox Code Playgroud)
目前没有显示任何内容.仅适用于StudentFields /
提前致谢.
PyCharm远程调试(pydevd)没有连接以下消息:
error: [Errno 10061] No connection could be made because the target machine actively refused it
Run Code Online (Sandbox Code Playgroud)
我该如何排除故障?
PyCharm中的输出控制台显示:
Starting debug server at port 21000
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('*.*.*.*', port=21000, suspend=False)
Waiting for process connection...
Server stopped.
Run Code Online (Sandbox Code Playgroud)
我检查了防火墙,PyCharm允许传入和传出连接.
我有一个非常简单APIView,但我不知道如何在这里设置分页.在这种情况下,我选择一个Event给定的pk,然后我得到所有NewsItems分配给它Event.
pagination_class = LimitOffsetPagination当我在开头定义queryset时,工作正常ListCreateAPIView,例如.queryset = Event.objects.all()但不是自定义get:
class EventNewsItems(APIView):
pagination_class = LimitOffsetPagination
def get(self, request, pk, format=None):
#user = request.user
event = Event.objects.get(pk=pk)
news = event.get_news_items().all()
serializer = NewsItemSerializer(news, many=True, context={'request':request})
response = Response(serializer.data, status=status.HTTP_200_OK)
return response
Run Code Online (Sandbox Code Playgroud)
解决了:
def get(self, request, pk, format=None):
#user = request.user
event = Event.objects.get(pk=pk)
news = event.get_news_items().all()
paginator = LimitOffsetPagination()
result_page = paginator.paginate_queryset(news, request)
serializer = NewsItemSerializer(result_page, many=True, context={'request':request}) …Run Code Online (Sandbox Code Playgroud) 我正在尝试从可以为空的模型导入数据BinaryField.数据不包含该字段,我希望在字段中使用空值导入它.如果该字段已存在于给定的数据库中id,则应保持该值不变.
我从fields相应Resource对象的白名单中删除了该字段,并将其添加到exclude黑名单中.但是,我在导入时遇到此错误 - can't pickle memoryview objects.
追溯:
Traceback (most recent call last):
File "/lib/python3.5/site-packages/import_export/resources.py", line 451, in import_row
original = deepcopy(instance)
File "/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/lib/python3.5/copy.py", line 174, …Run Code Online (Sandbox Code Playgroud) 我正在使用该django-filter包在我的列表视图上提供搜索功能.
现在我想为该视图添加一个分页.
我正在尝试将分页与过滤的查询集结合起来,但我不知道如何继续.
到目前为止,我已经尝试了以下内容views.py:
def search(request):
qs = local_url.objects.filter(global_url__id=1).all()
paginator = Paginator(qs, 25)
page = request.GET.get('page')
try:
pub = paginator.page(page)
except PageNotAnInteger:
pub = paginator.page(1)
except EmptyPage:
pub = paginator.page(paginator.num_pages)
url_filter = PublicationFilter(request.GET, queryset=qs)
return render(request, 'ingester/search_list.html', {'filter': url_filter, 'publication':pub})
Run Code Online (Sandbox Code Playgroud) 我创建了一个AssetsFilter类:
from django_filters import Filter
from django_filters import rest_framework as filters
from django_filters.fields import Lookup
from .models import Assets
class MyListFilter(Filter):
def filter(self, qs, value):
value_list = value.split(',')
return super(ListFilter, self).filter(qs, Lookup(value_list, 'in'))
class AssetsFilter(filters.FilterSet):
name = filters.CharFilter(lookup_expr='icontains', help_text=u'Filter by name')
criticality = MyListFilter(name='critical', help_text=u'Filter by_id')
class Meta:
model = Assets
fields = ['name', 'criticality ']
Run Code Online (Sandbox Code Playgroud)
现在我在我的Viewset中使用此过滤器,如下所示:
from .serializers import AssetSerializers
from .filters import AssetsFilter
class AssetViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` …Run Code Online (Sandbox Code Playgroud) python django swagger django-rest-framework django-rest-swagger
我需要提供http-basic-auth一个视图.
我想避免修改中间件设置.
背景:这是一个由远程应用程序填充的视图.
python authentication django http-authentication basic-authentication
python ×9
django ×7
pagination ×2
debugging ×1
django-forms ×1
fastapi ×1
pycharm ×1
pydev ×1
python-3.x ×1
swagger ×1