标签: django-models

获取Django查询集中项目数的最佳方法是什么?

我正在做一个Django查询.我想知道有多少MyModel有myAttribute值为"X".这就是我这样做的方式:

len(MyModel.objects.filter(myAttribute="X"))
Run Code Online (Sandbox Code Playgroud)

这是处理它的最有效方法吗?我担心这会不必要地从数据库中获取比我需要的更多的数据,而是我应该使用Count()函数.但是,从我看过的例子中我发现我不确定是否可以将Count()与filter()结合起来.有人可以建议吗?

django django-models django-queryset

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

抽象Django模型经理

我这里缺乏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.

python django metaprogramming django-models

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

使用celery将django模型中的保存方法重写为异步的最佳实践

我正在建立一个云系统,我有两个应用程序,包括完整功能的服务器应用程序,以及仅包含输入法的客户端应用程序,所以我在客户分支中安装客户端应用程序作为本地应用程序,

我希望在本地保存模型后覆盖应用程序中的任何模型,我将调用芹菜任务将此模型添加到队列中以确保它将到达,即使互联网已关闭,我将重试直到互联网起步,

现在我希望最佳实践能够以通用的方式对任何模型进行操作

我有两个选择

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)

哪一个是最佳实践,我可以为这个项目的所有模型制作泛型?

django message-queue django-models celery django-celery

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

django以表单的形式获取登录用户以构建queryset?

我有这个模型:

class Searches(models.Model):
    user = models.ForeignKey(User)
    .....other fields
Run Code Online (Sandbox Code Playgroud)

每个user都有某些保存的搜索。我想显示一个form(a choiceSelect widget)以选择多个搜索之一,然后单击go。我只想filterform中显示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 django-models django-forms django-users

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

Django - 如何规范化数据库?

我一直在问人们应该如何组织我的模型,他们一直告诉我要规范化数据库.

有人能给我看一个规范化的Django模型的例子吗?

python django database-design django-models django-views

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

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 foreign-keys django-models

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

如何在Django 1.7中通过外键将created_by和updated_by用户添加到model.py?

我最近开始使用Django,我正在尝试将它用作我编写的旧应用程序的配置管理工具.所以,我在我的Django项目中创建了一个名为配置的应用程序.

为了完全回答我上面的问题,问题分为两部分.

我想models.py在项目中添加一个类来存储所有配置值.另外,我想存储,增加了一个新的记录或更新记录的用户ID created_byupdated_by.有人告诉我,我做了以下事情:

"你需要在模型中建立几个外键字段(例如创建和更新),这两个字段都链接到auth.user.然后request.user在适当的时候抓住<model>.created = request.user<model>.updated = request.user在保存之前进行操作."

  1. 如何正确地为模型添加两个外键?

我试图完成他告诉我完成的第一步,即在我的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)

django django-models django-users

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

在Django ORM中执行反连接

我有两个模型:

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 django-models django-orm

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

限制Django中数据的生命周期

我在Django中有一个模型,它保存了一些月后无关的数据.有一种方法可以在一段时间后自动删除它吗?

DB是MySQL,如果它很重要,我无法判断这是在DB端完成的(也许是通过MySQL配置它的方法?),或者在我的后端代码中.

是否有快速解决方案,或者我是否必须编写执行此操作的代码,并让它每天运行,删除一个月前未添加的内容?

谢谢

mysql django django-models

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

模型中的Django Auto UUID不是唯一的

不确定这是否是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 django-models

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