小编bad*_*iya的帖子

在调用 save() 之前根据 max_digits 和 decimal_places 属性自动舍入 Django 的 DecimalField

在 ModelForm 中调用 save() 函数之前,我想根据 max_digits 和 decimal_places 属性自动舍入 Django 的 DecimalField。

目前使用以下:

  • Django 1.8
  • 蟒蛇 2.7

到目前为止我尝试过的。

https://djangosnippets.org/snippets/10554/


模型.py

amount = models.DecimalField(max_digits = 19, decimal_places = 2)
Run Code Online (Sandbox Code Playgroud)

视图.py

PS会在不同的领域和不同的模型中应用它

data = {"amount" : 100.1234,"name":"John Doe",...}
form = My_form(data)
if form.is_valid(): //the error throws from here.
    form.save()
else:
    raise ValueError(form.errors)
Run Code Online (Sandbox Code Playgroud)

表格.py

我计划清理 clean() 函数中的字段并对所有小数字段进行四舍五入,但是当我尝试打印 raw_data 时,没有“金额字段”。

class My_form(forms.ModelForm):
    Class Meta:
        model = My_model
        fields = ('amount','name')
    def clean(self):
        raw_data = self.cleaned_data
        print(raw_data) //only prints {'name' : 'John Doe'}
Run Code Online (Sandbox Code Playgroud)

python django

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

如何在 Django 中添加对评论的回复?

我正在用 Django 制作我自己的博客,并且我已经制作了一个评论系统。注释:

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.TextField()
    created_date = models.DateField(auto_now_add=True)
    parent = models.ForeignKey('self', null=True, related_name='replies')

    def __str__(self):
        return self.text
Run Code Online (Sandbox Code Playgroud)

这是我使用评论的 .html

  {% for comment in post.comments.all %}
 <ul>
  {{ comment.text }}
  {% for reply in comment.replies.all %}
      <li>
          {{ reply.text }}
      </li>
  {% endfor %}
 <ul>
 {% endfor %}
Run Code Online (Sandbox Code Playgroud)

显然它正在工作,但是当我尝试在 Django 的管理站点中发表评论时,它迫使我为每个评论添加一个“父级”(这不是强制性的,因为并非每个评论都是回复)我也没有知道如何在 HTML 文件中添加回复“按钮”。请帮助告诉我我可以做哪些更改来制作带有回复的简单评论框。非常感谢

html python django comments

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

Django 多对多:如何获取 id

我有具有 Manytomany 字段的模型:

class Brand(models.Model):
    Company_Group = models.ManyToManyField(Company)

class Company(models.Model):
    Pref_Company_Name_Flg = models.CharField(u'Preferred Name Flag',max_length=255, default="")
    Pref_Company_Name = models.CharField(u'Preferred Name',max_length=255, default="")
Run Code Online (Sandbox Code Playgroud)

我想过滤包含“company_instance”的品牌ID

brands = Brand.objects.all()
company_instance=company.objects.filter(id =company_id)
for brand in brands:
    for i in Brand.Company_Group.through.objects.filter(Company_Group = brand):
        print i.id
Run Code Online (Sandbox Code Playgroud)

我发现类似的问题如下:点击这里

但报告错误:

Cannot resolve keyword 'Company_Group' into field. Choices are: brand, brand_id, company, company_id, id
Run Code Online (Sandbox Code Playgroud)

然后我尝试这个方法,也报错:

type object 'Brand' has no attribute 'Company_id'
Run Code Online (Sandbox Code Playgroud)

谢谢安德万斯

django many-to-many

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

how to cast the output of Count() in django to FloatField in django 1.8

I am using django 1.8.

I have two models:-

class Query(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.TextField()
    details = models.TextField()
    pub_date = models.DateTimeField('date published')
    post_score=models.FloatField(default=0.0)
    ....

class Tags(models.Model):
    """docstring for Tags"""
    tagname=models.TextField()
grouppostlist=models.ManyToManyField(Query,through='GroupPostsTag',through_fields=('tag','query'))

# and another model(it stores tags for a query)

class GroupPostsTag(models.Model):
    query=models.ForeignKey('Query')
    tag=models.models.ForeignKey('Tags')
Run Code Online (Sandbox Code Playgroud)

Now I want to sort queries based on the sum of "number of tags" and query's "post_score". I am looking for something like this:-

tagged_user_posts = Query.objects.filter(Q(tags__id__in=tags_list)).annotate(num_tags=Cast(Count('tags'),models.FloatField())).annotate(post_scores=F('num_tags')+F('post_score')).order_by('-post_scores')
Run Code Online (Sandbox Code Playgroud)

Cast is provided in django 1.10. So …

django django-models django-orm

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

Django ORM 查询集按月、周、TruncMonth 分组

如何查询group byDjango ORM 中的日期时间字段?

楷模:

class test1(models.Model):
    id = models.AutoField(primary_key=True, unique=True, verbose_name='id')
    name = models.CharField(verbose_name='name', max_length=200)
    cdate = models.DateField(verbose_name='date', default=timezone.now)
Run Code Online (Sandbox Code Playgroud)

查询集数据

for i in test1.objects.all(): 
    print i.id, i.name, i.cdate

2 a 2017-08-11
3 b 2017-08-11
4 c 2017-08-11
5 a 2017-08-11
6 a 2017-08-11
Run Code Online (Sandbox Code Playgroud)

需要按月分组并使用 Django orm 计算 ID。

查询集

data = test1.objects.annotate(month=TruncMonth('cdate')).values('month').annotate(c=Count('id'))
for i in data:
    print i
Run Code Online (Sandbox Code Playgroud)

结果

{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)}
{'c': 1, 'month': datetime.date(2017, 8, 1)} …
Run Code Online (Sandbox Code Playgroud)

python django orm

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

django使用给定列表过滤多对多

我想要filter一个通过多对多中间关系连接到第二个模型的 Django 模型。

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __unicode__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __unicode__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

设计和预期结果

结果应该是仅选择人员 A,因为他通过成员资格连接到具有条目 1 和 2 的组。我想使用Q对象来完成此类任务。

谁能给我提示吗?

python django many-to-many object filter

0
推荐指数
1
解决办法
3515
查看次数