标签: django-models

如何使用Django进行"批量更新"?

我想用Django更新一个表 - 在原始SQL中是这样的:

update tbl_name set name = 'foo' where name = 'bar'
Run Code Online (Sandbox Code Playgroud)

我的第一个结果是这样的 - 但这很讨厌,不是吗?

list = ModelClass.objects.filter(name = 'bar')
for obj in list:
    obj.name = 'foo'
    obj.save()
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

django django-models

133
推荐指数
6
解决办法
10万
查看次数

Django转储单个模型的数据?

我可以dumpdata在一个模型上执行一个Django,而不是整个应用程序,如果是这样,怎么样?

对于一个应用程序,它将是:

python manage.py dumpdata myapp
Run Code Online (Sandbox Code Playgroud)

但是,我想要一些特定的模型,例如"myapp.mymodel"被转储.原因是,我有一些巨大的,300万条记录,数据集在同一个应用程序中,我不喜欢转储.

django django-models loaddata dumpdata

130
推荐指数
6
解决办法
8万
查看次数

Django FileField,在运行时确定upload_to

我正在尝试设置我的上传,以便如果用户joe上传文件,则转到MEDIA_ROOT/joe,而不是让每个人的文件都转到MEDIA_ROOT.问题是我不知道如何在模型中定义它.以下是目前的情况:

class Content(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to='.')
Run Code Online (Sandbox Code Playgroud)

所以我想要的不是'.' 作为upload_to,让它成为用户的名字.

据我所知,从Django 1.0开始,您可以定义自己的函数来处理upload_to,但该函数不知道用户是谁,所以我有点迷失.

谢谢您的帮助!

python django django-models

127
推荐指数
3
解决办法
5万
查看次数

django模型表单对象的自动创建日期?

自动设置对象的创建日期的最佳方法是什么,以及将在上次更新对象时记录的字段?

在我的模型中,我有:

created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)
Run Code Online (Sandbox Code Playgroud)

在我看来:

if request.method == 'POST':
    form = MyForm(request.POST)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.user = request.user
        obj.save()
        return HttpResponseRedirect('obj_list')
Run Code Online (Sandbox Code Playgroud)

我收到错误:

objects_object.created_at may not be NULL
Run Code Online (Sandbox Code Playgroud)

我是否必须自己手动设置此值?我认为这是传递给DateTimeFields的参数点(或者它们只是默认值,因为我设置'editable = False'它们不会显示在表单上,​​因此不会在请求中提交,因此不要进入表格?).

这样做的最佳方法是什么?一个init方法?

谢谢

ps - 我是django和Python的新手......

python django django-models

126
推荐指数
2
解决办法
8万
查看次数

如何为具有多对多字段的Django模型创建对象?

我的模特 - >

class Sample(models.Model):
    users = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)

我想这样做(在这个模型中保存用户,user1和user2) - >

user1 = User.objects.get(pk=1)
user2 = User.objects.get(pk=2)
sample_object = Sample(users=user1, users=user2)
sample_object.save()
Run Code Online (Sandbox Code Playgroud)

我知道这是错的:D,但我确定你得到了我想要做的......所以你会怎么做?

python django django-models django-orm

126
推荐指数
4
解决办法
8万
查看次数

Django:从字符串中获取模型?

在Django中,您可以指定以下关系:

author = ForeignKey('Person')
Run Code Online (Sandbox Code Playgroud)

然后在内部它必须将字符串"Person"转换为模型Person.

这样做的功能在哪里?我想用它,但我找不到它.

django django-models

123
推荐指数
8
解决办法
7万
查看次数

在Django模型中存储列表的最有效方法是什么?

目前我的代码中有很多python对象,类似于以下内容:

class MyClass():
  def __init__(self, name, friends):
      self.myName = name
      self.myFriends = [str(x) for x in friends]
Run Code Online (Sandbox Code Playgroud)

现在我想把它变成一个Django模型,其中self.myName是一个字符串字段,self.myFriends是一个字符串列表.

from django.db import models

class myDjangoModelClass():
    myName = models.CharField(max_length=64)
    myFriends = ??? # what goes here?
Run Code Online (Sandbox Code Playgroud)

由于列表是python中常见的数据结构,我希望它有一个Django模型字段.我知道我可以使用ManyToMany或OneToMany关系,但我希望避免代码中的额外间接.

编辑:

我添加了这个相关的问题,人们可能觉得有用.

python django django-models

122
推荐指数
10
解决办法
12万
查看次数

允许Django中的空值的唯一字段

我有模型Foo有字段栏.bar字段应该是唯一的,但允许空值,这意味着如果bar字段是null,我想允许多个记录,但如果不是,null则值必须是唯一的.

这是我的模型:

class Foo(models.Model):
    name = models.CharField(max_length=40)
    bar = models.CharField(max_length=40, unique=True, blank=True, null=True, default=None)
Run Code Online (Sandbox Code Playgroud)

这是表的相应SQL:

CREATE TABLE appl_foo
(
    id serial NOT NULL,
     "name" character varying(40) NOT NULL,
    bar character varying(40),
    CONSTRAINT appl_foo_pkey PRIMARY KEY (id),
    CONSTRAINT appl_foo_bar_key UNIQUE (bar)
)   
Run Code Online (Sandbox Code Playgroud)

当使用管理界面创建多个bar为空的foo对象时,它会给出一个错误:"Foo with this Bar已经存在."

但是当我插入数据库(PostgreSQL)时:

insert into appl_foo ("name", bar) values ('test1', null)
insert into appl_foo ("name", bar) values ('test2', null)
Run Code Online (Sandbox Code Playgroud)

这很好用,它允许我插入超过1条记录,条形为空,所以数据库允许我做我想要的,这只是Django模型的错误.有任何想法吗?

编辑

就DB而言,解决方案的可移植性不是问题,我们对Postgres感到满意.我已经尝试设置一个可调用的唯一,这是我的函数返回True/False为特定的bar值,它没有给出任何错误,但是如果它没有任何影响那么缝合.

到目前为止,我已经从bar属性中删除了唯一的说明符并处理了应用程序中的bar唯一性,但仍然在寻找更优雅的解决方案.有什么建议?

django orm django-models

121
推荐指数
7
解决办法
4万
查看次数

django:一起使用select_related和get_object_or_404

有没有使用任何方式get_object_or_404select_related在一起或者任何其他方式来实现使用这两个在一起(除了把它在尝试/除外)的结果?

django django-models

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

Django更新对象

如何在同一个查询集上运行update和select语句,而不是必须执行两个查询,一个用于选择对象,另一个用于更新对象?

SQL中的等价物如下:

update my_table set field_1 = 'some value' where pk_field = some_value
Run Code Online (Sandbox Code Playgroud)

sql django orm django-models django-queryset

114
推荐指数
5
解决办法
14万
查看次数