私信  •  关注

JPG

JPG 最近创建的主题
JPG 最近回复了
4 年前
回复了 JPG 创建的主题 » Django序列化程序显示相关模型的布尔字段

使用 source BooleanField ,

class AppVersionSerializer(serializers.ModelSerializer):
    auto_start = serializers.BooleanField(source='app_uuid.auto_start')

    class Meta:
        model = AppVersion
        fields = ('app_version_uuid', 'app_version_name', 'version_code', 'version_name', 'auto_start')
4 年前
回复了 JPG 创建的主题 » 运行“python manage.py check”时出错

Django:1.8 doc for reverse()

使用,

from django.core.urlresolvers import reverse

附加信息

django.core.urlresolvers.reverse
自版本1.10起已弃用: 在旧版本中,这些函数位于django.core.urlsolvers中。从旧位置导入将继续工作,直到Django 2.0。

4 年前
回复了 JPG 创建的主题 » AttributeError:模块'django.db.models'没有属性'cascade'

应该是 CASCADE - (Ref: Django Doc) 大写 )

question = models.ForeignKey(Question, on_delete=models.CASCADE)

因此你的 models.py 变成,

#models.py
from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

因为你用的是 APIView 类,它将允许在视图类中定义的所有方法。DRF响应允许 HTTP GET 方法,因为您已在视图中定义了。


下面的视图类将允许 HTTP GET,HTTP POST,HTTP PATCH,HTTP PUT and HTTP DELETE

class TokenValidateView(APIView):
    def get(self, request, format=None):
        # something
        return Response("this is HTTP GET")

    def post(self, request, format=None):
        return Response("this is HTTP POST")

    def patch(self, request, format=None):
        return Response("this is HTTP PATCH")

    def put(self, request, format=None):
        return Response("this is HTTP PUT")

    def delete(self, request, format=None):
        return Response("this is HTTP DELETE")

如上所述,响应类检查 http方法 在视图类中, 不是他们的反应 .

所以,如果你想删除 HTTP获取 你的方法 允许的方法 ,只需移除 get() 视图类中的方法

class TokenValidateView(APIView):
    # remove the "get()" method
    def get(self, request, format=None):
        # something
        return Response("this is HTTP GET")

    def post(self, request, format=None):
        return Response("this is HTTP POST")

    def patch(self, request, format=None):
        return Response("this is HTTP PATCH")

    def put(self, request, format=None):
        return Response("this is HTTP PUT")

    def delete(self, request, format=None):
        return Response("this is HTTP DELETE")
4 年前
回复了 JPG 创建的主题 » 如何在django rest框架中显示基于函数的视图端点

您应该指定 many=True 序列化时。

serializer = ProfileSerializer(profile, many=True)
5 年前
回复了 JPG 创建的主题 » 如何在django-rest框架中访问父模型中的子完整记录

试试这个片段


#serializers.py
"""I've re-arranged the order of 'RefreshmentImageSerializer' serializer and 'EntertainmentSerializer' serializer"""
class RefreshmentImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = RefreshmentImage
        fields = '__all__'


class EntertainmentSerializer(serializers.ModelSerializer):
    image = RefreshmentImageSerializer(many=True, source='refreshmentimage_set')

    class Meta:
        model = Refreshment
        fields = '__all__'

# views.py
"""Added DRF stuffs such as 'api_view' and 'Response'"""
from rest_framework.decorators import api_view


@api_view()
def all_games_sports(request):
    entertainment = Refreshment.objects.all()
    serialize = EntertainmentSerializer(instance=entertainment, many=True)
    main = {'status': True, 'code': "CODE_SUCCESSFUL", 'msg': "SUCCESS", 'games_sports': serialize.data}
    return Response(main)

{
"status": true,
"code": "CODE_SUCCESSFUL",
"msg": "SUCCESS",
"games_sports": [
    {
        "id": 1,
        "image": [
            {
                "id": 1,
                "image": null,
                "refreshment": 1
            },
            {
                "id": 3,
                "image": "refreshment_image/jpg-icon.png",
                "refreshment": 1
            }
        ],
        "title": "t1",
        "type": "tt1",
        "charges": "123.00"
    },
    {
        "id": 2,
        "image": [
            {
                "id": 2,
                "image": "refreshment_image/asd.jpg",
                "refreshment": 2
            }
        ],
        "title": "t2",
        "type": "tt2",
        "charges": "321.00"
    },
    {
        "id": 3,
        "image": [
            {
                "id": 4,
                "image": "refreshment_image/Screenshot_from_2018-10-26_16-32-41.png",
                "refreshment": 3
            },
            {
                "id": 5,
                "image": "refreshment_image/twitter.png",
                "refreshment": 3
            }
        ],
        "title": "t3",
        "type": "tt3",
        "charges": "754.00"
    }
]
}

我在这里做了什么?

  1. 重新排列序列化程序的顺序以避免 未定义 错误
  2. 在中添加了新字段 EntertainmentSerializer 类来显示与 Refreshment 对象
  3. views.py 我加了一些drf的东西,比较合适

工具书类

  1. @api_view() decorator
  2. DRF's Response() class
  3. DRF Nested Serializers
  4. 这个 source keyword argument

希望这有帮助!!

5 年前
回复了 JPG 创建的主题 » 在python csv writer中用0或null填充空列值

试试这样的东西,

with open(f'{store_data}/test.csv', 'w', encoding='utf-8') as dataFile:
    task_data = MonitorItem.objects.all()
    wr = csv.writer(dataFile)
    # wr.writerow(taskHeaders)
    for t in task_data:
        x = t.x or "0"
        y = t.y or "0"
        z = t.z or "0"
        wr.writerow([x, y, z])

这里 x = t.x or "0" 是对…的渴望

if t.x:
    x = t.x
else:
    x = "0"

希望这有帮助!!

尝试覆盖 __init__() 序列化程序的方法如下,

the_fields = ['VonDC', 'VonAC', 'VoffDC', 'VonDC2', ]


class MySerializer(serializers.Serializer):
    unitID = serializers.CharField(required=True, allow_blank=False, max_length=50)
    timestamp = serializers.DateTimeField(required=True)

    def __init__(self, *args, **kwargs):
        super(MySerializer, self).__init__(*args, **kwargs)
        for field in the_fields:
            self.fields.update({field: serializers.FloatField(required=False)})
5 年前
回复了 JPG 创建的主题 » django-是否可以在count()内执行queryset

正如“红蟋蟀”所说,你可以得到 过滤计数 达金戈的 count() 方法为

Client.objects.filter(my_otherfilters..,request__completed=True).count()

这将返回 整数值 代表伯爵。


如果你想 QuerySet 以及 count ,

qs = Client.objects.filter(my_otherfilters..,request__completed=True) # the "qs" will get the querysets
qs_count = qs.count() # "qs_count" will return the count
5 年前
回复了 JPG 创建的主题 » 如何在django模板中获取decrement forloop.counter?

你可以用 forloop.revcounter

{% for value in list %}
    {{ forloop.revcounter }}
{% endfor %}

尝试使用 readonly_fields 在里面 admin.py 文件

class TableAdmin(admin.ModelAdmin):
    readonly_fields = ('label',)

admin.site.register(Table, TableAdmin)
5 年前
回复了 JPG 创建的主题 » 添加Django模型约束?

你可以用几种方法

方法-1: 覆盖 save() 方法 Period 模型组件

from django.core.exceptions import ValidationError


class Period(models.Model):
    number = models.PositiveIntegerField(primary_key=True)
    start_time = models.TimeField()
    end_time = models.TimeField()

    def save(self, *args, **kwargs):
        if self.end_time < self.start_time:
            raise ValidationError("some message")
        super().save(*args, **kwargs)



方法-2: 覆盖 clean() 模型的方法

from django.core.exceptions import ValidationError


class Period(models.Model):
    number = models.PositiveIntegerField(primary_key=True)
    start_time = models.TimeField()
    end_time = models.TimeField()

    def clean(self):
        super().clean()  # calling default cleaning
        if self.end_time < self.start_time:
            raise ValidationError("some message")


方法-3: 覆盖 full_clean() 方法

from django.core.exceptions import ValidationError


class Period(models.Model):
    number = models.PositiveIntegerField(primary_key=True)
    start_time = models.TimeField()
    end_time = models.TimeField()

    def full_clean(self, exclude=None, validate_unique=True):
        super().full_clean(exclude=None, validate_unique=True)  # calling default full_clean
        if self.end_time < self.start_time:
            raise ValidationError("some message")



参考
1。 Model.clean() - Django doc
2。 Model.save() - Django doc
三。 Model.full_clean() - Django doc

5 年前
回复了 JPG 创建的主题 » 外部链接在Docker Compose中不工作

我建议您在同一个docker compose文件中使用这两个服务并替换 external_links 具有 links

version: '3'
services:
  mongodb:
    image: mongo:latest
    container_name: "mongodb"
    volumes:
      - ./data/db:/data/db
    ports:
      - 27017:27017
  webapp:
    build:
      context: .
    links:
      - mongodb
    depends_on:
      - mongodb
    ports:
      - 8080:8080


我如何确保MongoDB在webapp启动之前启动并运行?

阿飞 链接 会处理好情况的。

你可以使用 depends_on

方法1

重写 save() 方法 Value 模型,AS

class Visits(models.Model):
    value = models.IntegerField()
    coefficient = models.IntegerField()
    points = models.IntegerField(blank=True, null=True, editable=False)

    def save(self, *args, **kwargs):
        self.points = int(self.value / self.coefficient)
        super().save(*args, **kwargs)


方法2

使用 @property 装饰者

class Visits(models.Model):
    value = models.IntegerField()
    coefficient = models.IntegerField()

    @property
    def points(self):
        return int(self.value / self.coefficient)
5 年前
回复了 JPG 创建的主题 » 针对布尔值的Django表单验证不起作用

From the doc ,

因为所有的字段子类 required=True 默认情况下,这里的验证条件很重要。如果要在窗体中包含一个布尔值,该布尔值可以是 True False (例如,选中或未选中的复选框),您必须记住传入 required=False 当创建 BooleanField .



所以,添加 要求=假 在里面 BooleanField() 作为,

class AddItemToCartForm(forms.Form):
    part_id = forms.IntegerField()
    is_kit = forms.BooleanField(required=False)


附加信息 :
如果未选中该复选框,浏览器将不会发送请求的发布参数中的字段。如果不指定字段是可选的,Django将在不在post参数中时将其视为缺少的字段。

参考文献 : SO Post

5 年前
回复了 JPG 创建的主题 » 在django中使用annotate的日期时间差

因为你在使用 MYSQL 5.6 ,你可以使用MySQL TIMESTAMPDIFF(...) 功能。

我的建议是,通过继承 django.db.models.expressions.Func 类为,

class Format(dict):
    def __missing__(self, key):
        return '%(' + key + ')s'


class TIMESTAMPDIFF(Func):
    def __init__(self, start, end, unit='days'):
        extra = {}
        expressions = [start, end]
        extra['output_field'] = IntegerField()
        self.template = self.template % Format({"unit": unit})
        super().__init__(*expressions, **extra)

    function = 'TIMESTAMPDIFF'
    template = "%(function)s(%(unit)s, %(expressions)s)"



因此,annotation查询将为,

event_queryset = Event.objects.annotate(days=TIMESTAMPDIFF(F('start'), F('end'), unit='DAY' ))
参考文献 : How to implement TIMESTAMPDIFF() of MYSQL in Django
5 年前
回复了 JPG 创建的主题 » django rest框架manytomy字段排序

使用 SerializerMethodField 作为

class CarrierStopSerializer(serializers.ModelSerializer):
    carrier = serializers.StringRelatedField()
    bus_stop = serializers.SerializerMethodField(read_only=True)

    def get_bus_stop(self, model):
        return [bus_stop.__str__() for bus_stop in model.bus_stop.all().order_by('id')]

    class Meta:
        model = CarrierStop
        fields = ['id', 'carrier', 'bus_stop']
5 年前
回复了 JPG 创建的主题 » django cbv:get()和get_-context_-data()。

我正在尝试从get()方法传递查询集以获取上下文数据()。


class StatsView(DetailView):
    """ Create statistics pageview """
    template_name = 'app/stats.html'

    def get(self, request, *args, **kwargs):
        queryset = SampleModel.objects.all()
        return render(request, self.template_name, context=self.get_context_data(queryset=queryset))

    def set_if_not_none(self, mapping, key, value):
        if value is not None:
            if len(value) != 0:
                mapping[key] = value

    def get_context_data(self, **kwargs):
        qs = kwargs.get('queryset')
        # do something


如果你压倒一切 get_context_data() 方法,它可以调用 super() 方法AS

class StatsView(DetailView):
    # your code

    def get_context_data(self, **kwargs):
        data = super(StatsView, self).get_context_data(**kwargs)
        data.update({"foo": "bar"})
        return data

我想知道一些有关 get() 获取上下文数据()

我觉得已经很好地回答了, When to use get, get_queryset, get_context_data in Django?

自从 language 是一个 reverse relation 不应该是 CharField . 所以你必须定义 LanguageSerializer() 在你的地图上 GetCompanySerializer 如下所示,

class LanguageSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = Language


class GetCompanySerializer(serializers.ModelSerializer):
    language = LanguageSerializer(many=True)

    class Meta:
        model = Company
        fields = ('company_name', 'started_from', 'country', 'email', 'website', 'ip', 'active', 'language')



如果你想得到 __str__() 代表 Language 模型,应用 StringRelatedField() 而不是 CharField()

class GetCompanySerializer(serializers.ModelSerializer):
    language = serializers.StringRelatedField(many=True)

class Meta:
    model = Company
    fields = ('company_name', 'started_from', 'country', 'email', 'website', 'ip', 'active', 'language')</code></pre>