我正在申请会员申请.我想提出会员提醒.(成员在一段时间内不是另一段时间的成员).
目前,我正在使用set这个计算.请参阅下面的代码.
class Member(models.Model):
...
class Membership(models.Model):
member = models.ForeignKey(Member, verbose_name=_("Member"))
start_date = models.DateField(_("Start date"))
end_date = models.DateField(_("End date"))
x = Member.objects.filter(Q(membership__start_date__lte=dt1) & Q(membership__end_date__gte=dt1))
y = Member.objects.filter(Q(membership__start_date__lte=dt2) & Q(membership__end_date__gte=dt2))
result = set(x) - set(y)
Run Code Online (Sandbox Code Playgroud)
我想知道我只能通过使用django ORM(filter,exclude,annotate,distinct ...)来做到这一点?
在此先感谢您的帮助
事实上,我的模型有点复杂.我也有报纸外键.
class Member(models.Model):
...
class Newspaper(models.Model):
...
class Membership(models.Model):
member = models.ForeignKey(Member, verbose_name=_("Member"))
start_date = models.DateField(_("Start date"))
end_date = models.DateField(_("End date"))
newspaper = models.ForeignKey(Newspaper)
Run Code Online (Sandbox Code Playgroud)
我希望得到一份特定报纸的提醒.在这种情况下,工作查询是
sin = models.Membership.objects.filter(start_date__lte=dt1,
end_date__gte=dt1,
newspaper__id=2)
sout = models.Membership.objects.filter(start_date__lte=dt2,
end_date__gte=dt2,
newspaper__id=2)
result = models.Member.objects.filter(membership__in=sin).exclude(membership__in=sout)
Run Code Online (Sandbox Code Playgroud)
我认为这是一个更详细的答案给出了Ghislain …
我想问一个问题,我怎么能在django中增加一个模型字段.假设我有一个名为的模型
我的书签(请求):
Run Code Online (Sandbox Code Playgroud)url=models.URLField() popularity=models.IntegerField()
然后通过使用Django模板我有
bookmarks.html
{%for list_tagg%}中的数据库
网址:{{database.url}}
热门:{{database.popularity}}
{%endfor%}
现在:如果有人点击链接(即bookmarks.html页面中的URL字段),我希望人气应该增加1.我怎么能这样做?有帮助吗?
我正在尝试使用list_display访问管理员中的字段.根据文档:(https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display),不支持ManyToManyFields.我通过创建这样的自定义方法来解决这个问题:
#models.py
class Gig
musician = models.ManyToManyField(Musician)
note = models.CharField(max_length=20)
def __unicode__(self):
return u'%s' % (self.note)
def gig_musicians(self):
return self.musician.all()
#admin.py
class GigAdmin
list_display = ('note', 'gig_musicians')
Run Code Online (Sandbox Code Playgroud)
这给了我正在寻找的结果,但它非常难看(这也适用于通用关系).结果如下:
[<Musician: Richard Bona>, <Musician: Bobby Mcerrin>]
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我如何构建方法.你对如何使这更优雅,即只是名字有任何建议吗?
我尝试了其他解决方案,例如, django显示了很多地方的内容,但我无法让它为我工作(它只显示无)
我想从我的查询集中删除 3 个对象。这在额外列表的帮助下工作,但我很确定应该有更好的方法来使用QuerySet API来做到这一点。但是我还没有弄清楚如何:
我在做什么:
ranks = Rank.objects.all()
remove_ranks = ['Field Marshall', 'Military Attache', 'Mercenary Recruiter']
new_ranks =[]
for rank in ranks:
if not rank.name in remove_ranks:
new_ranks.append(rank)
Run Code Online (Sandbox Code Playgroud)
我如何使用 Django API 做到这一点?
我有以下模型:
class Product(models.Model):
provinces = models.ManyToManyField('Province', related_name='formats')
Run Code Online (Sandbox Code Playgroud)
默认情况下,产品可以在每个省销售。如何定义模型“产品”,以便默认情况下创建的每个产品都包含所有省份?
谢谢!
我想将字段值(id)附加到如下所示的QS,但是Django抛出“ str”对象没有属性“ lookup”错误。
Book.objects.all().annotate(some_id='somerelation__id')
Run Code Online (Sandbox Code Playgroud)
看来我可以使用Sum()获得我的id值
Book.objects.all().annotate(something=Sum('somerelation__id'))
Run Code Online (Sandbox Code Playgroud)
我想知道没有办法简单地将原始字段值注释为QS吗?在这种情况下使用sum()感觉不对。
我有python模块做一些东西,我需要在数据库中保存一些项目.
Currenlt我正在使用原始sql来插入数据.但我想使用django ORM.
我不需要任何网址,视图等我想要的只是我可以创建模型然后应该能够保存它
user.save()
现在我不想在那里有不必要的文件和数据.但我不确定我需要哪些文件.我需要
settings.py
urls.py
views.py
app folder.
Run Code Online (Sandbox Code Playgroud)
是否有可能只是models.py在设置中DATABASE config.
我是否也需要创建一个应用程序
我的内容模型与标签模型具有多对多关系。保存Content对象时,我想动态添加关系。我按照以下方式进行操作。
def tag_content(obj):
obj.tags.add([1,2,3])
obj.is_tagged = True
obj.save()
return obj
class Tag(models.Model):
name = models.CharField(max_length=255)
class Content(models.Model):
title = models.CharField(max_length=255)
is_tagged = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag, blank=True)
def save(self, *args, **kwargs):
super(Content, self).save(*args, **kwargs)
@receiver(post_save, sender = Content)
def update_m2m_relationships_on_save(sender, **kwargs):
if not kwargs['instance'].is_tagged:
tag_content(kwargs['instance'])
Run Code Online (Sandbox Code Playgroud)
基本上,当保存Content对象时,将使用接收方来调用post_save方法,该方法又调用tag_content方法来添加m2m关系。但是,我收到此错误:
TypeError
unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
它专门引用.add()函数。知道为什么我会收到此错误吗?任何帮助表示赞赏。另外,请注意我在数据库中有ID为1、2和3的Tag对象。
编辑
好了,我将tag_content更改为以下内容:
def tag_content(obj):
for tag in Tag.objects.all():
print tag
obj.tags.add(tag)
Run Code Online (Sandbox Code Playgroud)
这是因为add()方法接受对象实例,而不接受ID。但是,它仍然不起作用:/我没有收到任何错误,但是关系没有建立。
这特别奇怪,因为print tag命令可以工作并打印出标签。换句话说,该函数正在被调用。有什么帮助吗?顺便说一句,我正在运行Django 1.9.8。
我有一个模型A,其中有一个名为的字段name。如何获取pre_save信号中的先前值和新值?
@receiver(pre_save, sender=A)
def signal_product_manage_latest_version_id(
sender, instance, update_fields=None, **kwargs):
if 'name' in update_fields:
print(instance.name)
Run Code Online (Sandbox Code Playgroud)
name当我调用以下代码时,是旧值还是新值?
a = A.objects.create(name="John")
a.name = "Lee"
a.save()
Run Code Online (Sandbox Code Playgroud) 我的模特
class User(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
class Phone(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='phone', on_delete=models.CASCADE)
phone = models.CharField(max_length=50)
class Email(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='email', on_delete=models.CASCADE)
email = models.EmailField()
Run Code Online (Sandbox Code Playgroud)
我希望只有在他的字段中没有值时才可以删除该对象
def delete_user(request, id):
user = User.objects.get(id=id)
if not user.email or user.phone:
if request.method == 'POST':
user.delete()
print(user.email)
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
Run Code Online (Sandbox Code Playgroud)
我试过了但是没用