我正在学习Django REST Framework。我想在django rest框架中使用django-filter选择我想要的结果。我写了一个filter.py来获取价格在pricemin和pricemax之间的商品:
class GoodsFilter(filters.FilterSet):
pricemin = filters.NumberFilter(name="shop_price", lookup_expr='gte')
pricemax = filters.NumberFilter(name="shop_price", lookup_expr='lte')
class Meta:
model = Goods
fields = ['pricemin', 'pricemax']
Run Code Online (Sandbox Code Playgroud)
然后我在view.py中使用了此过滤器:
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend,)
filter_class = GoodsFilter
Run Code Online (Sandbox Code Playgroud)
当我运行项目时,会出现如下错误:
TypeError at /goods/
__init__() got an unexpected keyword argument 'name'
Run Code Online (Sandbox Code Playgroud)
我没有在代码中使用参数'name',所以我不知道该错误。追溯:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/goods/
Django Version: 2.0.3
Python Version: 3.6.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'DjangoUeditor',
'users.apps.UsersConfig',
'goods.apps.GoodsConfig',
'trade.apps.TradeConfig',
'user_operation.apps.UserOperationConfig',
'crispy_forms', …Run Code Online (Sandbox Code Playgroud) 这是我的models.py
from __future__ import unicode_literals
from django.db import models
class User(models.Model):
name = models.CharField(max_length=200)
company_name = models.ForeignKey('Company',on_delete=models.CASCADE,related_name='user')
def __str__(self):
return self.name
class Company(models.Model):
name = models.CharField(max_length=200)
phone_number = models.IntegerField(null=True,blank=True)
def __str__(self):
return self.name
class Catalog(models.Model):
name = models.CharField(max_length=200)
no_of_pcs = models.IntegerField(null=True,blank=True)
per_piece_price = models.DecimalField(null=True,blank=True,max_digits=10,decimal_places=2)
company_name = models.ForeignKey(Company,on_delete=models.CASCADE,related_name='catalog')
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
这是我的 serializers.py
from rest_framework import serializers
from .models import *
from django.db.models import Sum,Count
class UserSerializer(serializers.ModelSerializer):
# name = serializers.StringRelatedField()
# company_name = serializers.CharField()
class Meta:
model = User …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 django-graphene 返回过滤结果,但它给出了有关错误消息的错误
class PatientType(DjangoObjectType):
class Meta:
model = Patients
exclude = ('active',)
interfaces = (relay.Node,)
class PatientsQuery(ObjectType):
get_patient = graphene.Field(PatientType, id=graphene.Int())
all_patients = graphene.List(
PatientType, first=graphene.Int(), skip=graphene.Int(), phone_no=graphene.Int()
)
upcoming_appointments = DjangoFilterConnectionField(PatientType)
@permissions_checker([IsAuthenticated, CheckIsOrganizationActive])
def resolve_upcoming_appointments(self, info, **kwargs) -> List:
d = datetime.today() - timedelta(hours=1)
settings.TIME_ZONE # 'Asia/Karachi'
aware_datetime = make_aware(d)
res = Patients.objects.filter(appointments__booking_date__gte=aware_datetime,
appointments__booking_date__day=aware_datetime.day,
appointments__status=True)
if res:
return res
return []
class Query(
organization_schema.OrganizationQuery,
inventory_schema.MedicineQuery,
patient_schema.PatientsQuery,
graphene.ObjectType,
):
pass
Run Code Online (Sandbox Code Playgroud) 考虑到我有一个简单的观点,
# serializers.py
class EmptyPayloadResponseSerializer(serializers.Serializer):
detail = serializers.CharField()
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from drf_spectacular.utils import extend_schema
from .serializers import EmptyPayloadResponseSerializer
class EmptyPayloadAPI(APIView):
@extend_schema(responses=EmptyPayloadResponseSerializer)
def post(self, request, *args, **kwargs):
# some actions
return Response(data={"detail": "Success"})
Run Code Online (Sandbox Code Playgroud)
当我渲染架构时,我收到以下错误响应,
错误#0:EmptyPayloadAPI:无法猜测序列化程序。这是 APIView 的优雅后备处理。如果视图在您的控制之下,请考虑使用 GenericAPIView 作为视图基类。暂时忽略视图。
那么,我如何告诉@extend_schema装饰器我不打算传递任何内容作为有效负载?
有什么办法可以使用两个不同的邮箱地址通过SSH Key操作GitLab和GitHub账户吗?
我有两个邮件 id,username@gmail.com并且username@xyz.in我想将一些项目推送到 gitlab 以及一些其他项目到 github,并且我想避免在每个推送命令中输入密码提示。是否可以?
我正在尝试使用变量访问字典中的值,所有这些都在遵循 Django 模板语言的 HTML 文件中。Django 的模板语言不允许您使用变量作为键来访问字典,因此我决定使用 Django 过滤器来执行此操作。但是,我收到“无效过滤器”错误,我不知道为什么。
我的 html 文件
<table class="table">
<tbody>
<tr>
<th scope="row">Username</th>
<th scope="row">Full Name</th>
<th scope="row">Points</th>
{% for subject in subjects %}
<th scope="row">{{ subject }}</th>
{% endfor %}
</tr>
{% for user in users %}
<tr>
<td>
<a href="{% url 'profile' username=user.username %}">{{ user.username }}</a>
</td>
<td>{{ user.first_name }} {{ user.last_name }}</td>
<td>{{ user.profile.points.total }}</td>
{% for subject in subjects %}
<td>{{ user.profile.points|keyvalue:subject }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
Run Code Online (Sandbox Code Playgroud)
我的过滤器.py …
场景:
我有一个模型,Customer
class Customer(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
company = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
现在我用如下关系更新了company属性ForeignKey,
class Company(models.Model):
name = models.CharField(max_length=100)
location = models.CharField(max_length=100)
class Customer(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
company = models.ForeignKey(Company)
Run Code Online (Sandbox Code Playgroud)
我需要的是,当新的迁移应用于数据库时,相应的Company实例必须自动生成并映射到实例的company属性Customer。
那可能吗?我怎样才能做到这一点?
如何将数据从序列化程序保存到模型数据库。以下是示例代码但不将数据保存到数据库!
例如,我正在使用示例视图:
views.py
@api_view(['GET', 'POST', ])
def login(request):
if request.method == "POST":
s = LoginSerializer(data=request.data)
if s.is_valid():
s.save()
return Response(s.data, status=201)
else:
return Response(s.data, status=203)
else:
return Response("", status=404)
Run Code Online (Sandbox Code Playgroud)
模型.py
from django.db.models import Model
from django.db import models
class UserDetails(Model):
userid = models.AutoField(primary_key=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
phone = models.CharField(max_length=15)
class UserLogin(Model):
userid = models.ForeignKey(UserDetails, on_delete=None)
email = models.CharField(max_length=20)
password = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
序列化程序.py
from rest_framework import serializers
from api.models import UserLogin, UserDetails
class LoginSerializer(serializers.Serializer):
userid = serializers.Field()
email …Run Code Online (Sandbox Code Playgroud) 我需要获取文件参数在我的 rest api 中。
模型:
class Movie(models.Model):
title = models.CharField(max_length=100)
attachment = models.FileField(upload_to='files/courses/', default=None, blank=True, null=True)
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
序列化器:
class MovieSerializer(serializers.ModelSerializer):
attachment = serializers.FileField()
class Meta:
model = Movie
fields = ('title','attachment')
Run Code Online (Sandbox Code Playgroud)
看法:
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
Run Code Online (Sandbox Code Playgroud)
当我做 GET 请求时,我得到了标题和文件 url,但我也想得到文件大小和文件名。怎么做?
我有两个/多个域,foo.com并且bar.com都具有相同的后端,这意味着两个域都将即将到来的请求重定向到托管在其他地方的同一个 “Web 实例”。
如果用户登录foo.com,他/她还需要登录bar.com才能访问任何端点/URL,例如bar.com/some/url/end-point/。
的SESSION_COOKIE_DOMAIN,如果我的域有可能做一些常见的模式。不幸的是,我没有。
问题
如何跨多个域维护用户会话?