我正在做一个Django查询.我想知道有多少MyModel有myAttribute值为"X".这就是我这样做的方式:
len(MyModel.objects.filter(myAttribute="X"))
Run Code Online (Sandbox Code Playgroud)
这是处理它的最有效方法吗?我担心这会不必要地从数据库中获取比我需要的更多的数据,而是我应该使用Count()函数.但是,从我看过的例子中我发现我不确定是否可以将Count()与filter()结合起来.有人可以建议吗?
我这里缺乏Python元编程知识.假设我有以下内容:
class OwnCompanyManager(models.Manager):
"""Only companies of this user"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnCompanyManager, self).get_queryset()
return super(OwnCompanyManager, self).get_queryset().filter(
companyuser__user=user)
class OwnPublisherManager(models.Manager):
"""Only publishers of this user's company"""
def get_queryset(self, user):
if user.is_superuser:
return super(OwnPublisherManager, self).get_queryset()
return super(OwnPublisherManager, self).get_queryset().filter(
company__companyuser__user=user)
class Company(models.Model):
name = models.CharField(max_length=45)
objects = models.Manager()
own = OwnCompanyManager()
class Publisher(models.Model):
company = models.ForeignKey(Company)
allow_latest_dev = models.BooleanField(default=False)
domains_blocked = models.BooleanField(default=False)
objects = models.Manager()
own = OwnPublisherManager()
Run Code Online (Sandbox Code Playgroud)
我还有很多.我不喜欢复制粘贴样板Own(Publisher|Company|Etcetra)Manager).正如您所见,唯一的变化是在过滤器中.
我怎样才能提取Own(InsertModelNameHere)Manager和使用它Company,Publisher和其他车型?我想在管理器定义中指定过滤器kwargs.
我正在建立一个云系统,我有两个应用程序,包括完整功能的服务器应用程序,以及仅包含输入法的客户端应用程序,所以我在客户分支中安装客户端应用程序作为本地应用程序,
我希望在本地保存模型后覆盖应用程序中的任何模型,我将调用芹菜任务将此模型添加到队列中以确保它将到达,即使互联网已关闭,我将重试直到互联网起步,
现在我希望最佳实践能够以通用的方式对任何模型进行操作
我有两个选择
1-这样的覆盖保存方法
def save(self, *args, **kwargs):
super(Model, self).save(*args, **kwargs)
save_task.delay(self)
Run Code Online (Sandbox Code Playgroud)
或使用这样的信号
post_save.connect(save-task.delay, sender=Model)
Run Code Online (Sandbox Code Playgroud)
哪一个是最佳实践,我可以为这个项目的所有模型制作泛型?
我有这个模型:
class Searches(models.Model):
user = models.ForeignKey(User)
.....other fields
Run Code Online (Sandbox Code Playgroud)
每个user都有某些保存的搜索。我想显示一个form(a choiceSelect widget)以选择多个搜索之一,然后单击go。我只想filter在form中显示searches特定的User。这就是我尝试过的。但request.user下面不起作用。如何解决这个问题?
这是我的表格:
class SearchesForm(forms.Form):
#get the queryset for the searches model of logged in user
qset=Searches.objects.filter(user=request.user) ----> error
#get the most recent entry
default=Searches.objects.latest('id')
choices = forms.ModelChoiceField(queryset=qset,label='select search',initial=default)
Run Code Online (Sandbox Code Playgroud)
编辑:我的看法:
def display_search_user(request):
form=SearchesdiffForm(request)
if request.method=='POST':
search=SearchesdiffForm(request,data=request.POST)
print search
return HttpResponse(search)
return render(request,'search_list.html',{'form':form})
Run Code Online (Sandbox Code Playgroud) 我一直在问人们应该如何组织我的模型,他们一直告诉我要规范化数据库.
有人能给我看一个规范化的Django模型的例子吗?
我有2个模型(例如)。
class A(models.Model):
name = models.CharField()
class B(models.Model):
a = models.ForeignKey(A)
my_name = models.CharField()
Run Code Online (Sandbox Code Playgroud)
因此,我想创建(和更新)my_nameB实例的字段name,以及它所关联的A实例的字段(一对多关系)。
我试过了:
class B(models.Model):
....
def __init__(self, *args, **kwargs):
self.my_name = self.a.name
Run Code Online (Sandbox Code Playgroud)
但是我有错误:
AttributeError
Exception Value:
'B' object has no attribute 'a_id'
Run Code Online (Sandbox Code Playgroud)
我认为这与Django _id为外键字段添加一个有关,因此我尝试了:
class B(models.Model):
a = models.ForeignKey(A, db_column="a")
...
Run Code Online (Sandbox Code Playgroud)
但是我有同样的错误。
我是Django的新手。谢谢!
我最近开始使用Django,我正在尝试将它用作我编写的旧应用程序的配置管理工具.所以,我在我的Django项目中创建了一个名为配置的应用程序.
为了完全回答我上面的问题,问题分为两部分.
我想models.py在项目中添加一个类来存储所有配置值.另外,我想存储,增加了一个新的记录或更新记录的用户ID created_by和updated_by.有人告诉我,我做了以下事情:
"你需要在模型中建立几个外键字段(例如创建和更新),这两个字段都链接到auth.user.然后request.user在适当的时候抓住<model>.created = request.user并<model>.updated = request.user在保存之前进行操作."
我试图完成他告诉我完成的第一步,即在我的models.py文件中创建分配给created_by和的外键字段updated_by.但是,当我尝试以下代码时,我收到一个错误.
from django.db import models
from django.contrib.auth.models import User
class GeneralConfiguration(models.Model):
updated_by=models.ForeignKey(User)
created_by=models.ForeignKey(User)
created_timestamp=models.DateTimeField(auto_now_add=True, auto_now=False)
updated_timestamp=models.DateTimeField(auto_now_add=True, auto_now=False)
def __unicode__(self):
return "General Configuration"
Run Code Online (Sandbox Code Playgroud)
错误消息显示:
jython manage.py makemigrations
?[31;1mCommandError: System check identified some issues:
ERRORS:
?[31;1mconfigurations.GeneralConfiguration.created_by: (fields.E304) Reverse acc
essor for 'GeneralConfiguration.created_by' clashes with reverse accessor for 'G
eneralConfiguration.updated_by'.
HINT: Add …Run Code Online (Sandbox Code Playgroud) 我有两个模型:
class Note(model):
<attribs>
class Permalink(model):
note = foreign key to Note
Run Code Online (Sandbox Code Playgroud)
我想执行一个查询:获取没有固定链接的所有笔记。在SQL中,我会像这样:
SELECT * FROM Note WHERE id NOT IN (SELECT note FROM Permalink);
Run Code Online (Sandbox Code Playgroud)
想知道如何在ORM中执行此操作。
编辑:我不想让所有的永久链接进入我的应用程序。而是希望它作为查询在数据库内运行。
我在Django中有一个模型,它保存了一些月后无关的数据.有一种方法可以在一段时间后自动删除它吗?
DB是MySQL,如果它很重要,我无法判断这是在DB端完成的(也许是通过MySQL配置它的方法?),或者在我的后端代码中.
是否有快速解决方案,或者我是否必须编写执行此操作的代码,并让它每天运行,删除一个月前未添加的内容?
谢谢
不确定这是否是Django中的错误,或者它不支持我正在尝试做的事情(或者我是如何做的).
我的模型的片段:
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True, related_name='profile'
login_hash = models.CharField(max_length=36, blank=True, null=True, default=uuid.uuid4())
...
Run Code Online (Sandbox Code Playgroud)
如您所见,我已将默认值设置为login_hash调用uuid.uuid4()
工作正常...但是,多次调用UserProfile(快速创建新用户,甚至看似几分钟,但我不是正式时间)将导致login_hash多个用户相同.
似乎django(我在1.7.4)正在缓存uuid4()一段时间的结果.对我正在尝试做的事情不利.
解决方案:我正在使用.我只是在数据库上设置了一个'on insert'触发器,这样当我插入一条新记录时,数据库就会生成UUID,但仅限于插入/新记录.
有没有办法在django中做到这一点,以便我可以保持数据库不可知?
django ×10
django-models ×10
django-users ×2
python ×2
celery ×1
django-forms ×1
django-orm ×1
django-views ×1
foreign-keys ×1
mysql ×1