在 ModelForm 中调用 save() 函数之前,我想根据 max_digits 和 decimal_places 属性自动舍入 Django 的 DecimalField。
目前使用以下:
到目前为止我尝试过的。
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) 我正在用 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 文件中添加回复“按钮”。请帮助告诉我我可以做哪些更改来制作带有回复的简单评论框。非常感谢
我有具有 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)
谢谢安德万斯
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 …
如何查询group by
Django 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) 我想要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
对象来完成此类任务。
谁能给我提示吗?
django ×6
python ×4
many-to-many ×2
comments ×1
django-orm ×1
filter ×1
html ×1
object ×1
orm ×1