标签: django-orm

如何在Django中为模型获取具有反向关系的所有类的集合?

鉴于:

from django.db import models

class Food(models.Model):
     """Food, by name."""
     name = models.CharField(max_length=25)

class Cat(models.Model):
     """A cat eats one type of food"""
     food = models.ForeignKey(Food)

class Cow(models.Model):
     """A cow eats one type of food"""
     food = models.ForeignKey(Food)

class Human(models.Model):
     """A human may eat lots of types of food"""
     food = models.ManyToManyField(Food)
Run Code Online (Sandbox Code Playgroud)

一个人,只给出食物类,如何获得一组与"反向关系"的所有类.即给出食物类,如何获得,人类课程.

我认为这是可能的,因为Food有三个"反向关系":Food.cat_set,Food.cow_setFood.human_set.

帮助谢谢,谢谢!

python django django-models django-orm

4
推荐指数
2
解决办法
2549
查看次数

Django multidb:写入多个数据库

使用Django multidb,编写运行主/从基础结构的路由器相当容易.但是有可能编写一个写入多个数据库的路由器吗?我的用例是一组项目,都在同一个域上运行.为了节省用户在每个站点上注册/登录,我想同步contrib.authcontrib.sessions表.这是可能的Django multidb还是我应该研究数据库系统的复制功能(在我的情况下是MySQL)?

python django django-orm

4
推荐指数
2
解决办法
3581
查看次数

如何在Django ModelForm中过滤ManyToManyField选项?

我想在我的ModelForm中过滤ManyToManyField选项:

class MyForm(forms.ModelForm):
    class Meta:
        model = Entity
        fields = ['parent_entities']

    def __init__(self, *args, **kwargs):
        self.root_entity = kwargs.pop('root_entity')
        self.Meta.fields['parent_entities'].queryset = Entity.objects.filter(root_entity=self.root_entity)
        super(MyForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我尝试过很多我见过的不同代码,但还没有任何工作.

我想我的问题是我无法获得这个'parent_entities'字段.使用此代码,我有错误:

list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-orm

4
推荐指数
1
解决办法
2001
查看次数

Django模型继承:删除子类保持超类

在django中处理whith模型继承时,是否可以删除模型子类的实例,而无需删除超类本身?

使用Django示例,您可以只删除Resturaunt对象并保留Place对象吗?

python django django-models django-orm

4
推荐指数
2
解决办法
2377
查看次数

使用Django ORM处理大量大型记录

我有一个包含大约30k记录的表,我正在尝试迭代并使用Django的ORM进行处理.每个记录存储几个二进制blob,每个blob可以是几MB,我需要处理和写入文件.

但是,由于内存限制,我在使用Django时遇到了麻烦.我的系统上有8GB的内存,但在处理了大约5k的记录之后,Python进程消耗了所有8GB并被Linux内核杀死.我已经尝试了各种技巧来清除Django的查询缓存,例如:

  1. 定期打电话 MyModel.objects.update()
  2. 设置 settings.DEBUG=False
  3. 定期调用Python的垃圾收集器 gc.collect()

但是,这些似乎没有任何明显的效果,我的过程继续遇到某种内存泄漏,直到它崩溃.

还有什么我可以做的吗?

由于我只需要一次处理一个记录,并且我从不需要在进程中再次访问同一记录,所以我不需要保存任何模型实例,或者一次加载多个实例.你如何确保只加载一条记录,并且Django 没有缓存任何内容并在使用后立即取消分配所有内存?

python django django-orm

4
推荐指数
1
解决办法
940
查看次数

在django中保存对象列表

我正在使用django 1.5,我正在尝试做这样的事情:

    quotes = formset.save()
    user = client_form.save()
    for quote in quotes:
        quote.client = user
    quotes.save()
Run Code Online (Sandbox Code Playgroud)

但是列表没有save()方法,所以有一些内置的功能可以做类似的事情吗?

我发现这个关于在Django中批量保存对象的问题

django 1.5仍然是真的吗?有没有办法避免对列表的每个对象进行save()调用?

这是我的实际视图代码:

def new_quote(request):
    QuoteLineFormSet = modelformset_factory(QuoteLine, form=QuoteLineForm, extra=2)

    if request.method == 'POST':
        formset = QuoteLineFormSet(request.POST, request.FILES, queryset=QuoteLine.objects.none())
        quote_form = QuoteForm(request.POST, request.FILES)
        if formset.is_valid() and quote_form.is_valid():
            quote_lines = formset.save(commit=False)
            #quote_lines = formset.get_queryset()
            quote = quote_form.save()
            for quote_line in quote_lines:
                quote_line.quote = quote
                quote_line.save()
            request.session['quote_id'] = quote.id
            return HttpResponseRedirect(reverse('new_client'))
    else:
        formset = QuoteLineFormSet(queryset=QuoteLine.objects.none())
        quote_form = QuoteForm()

    return render(request, 'request_quote_form.html', {
        'formset': …
Run Code Online (Sandbox Code Playgroud)

python django django-orm django-views django-1.5

4
推荐指数
1
解决办法
6342
查看次数

django-如何将实际图像文件从一个模型复制到另一个模型?

我想将图像从一个模型复制到项目中的另一个模型。假设这些是我的模型:

class BackgroundImage(models.Model):
    user = models.ForeignKey(User)
    image = models.ImageField(upload_to=get_upload_file_name)
    caption = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)


class ProfilePicture(models.Model):
    user = models.ForeignKey(User)
    image = models.ImageField(upload_to=get_upload_file_name)
    caption = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)

    @classmethod
        def create_from_bg(cls, bg_img):
            img = cls(user=bg_img.user, image=bg_img.image, caption=bg_img.caption+'_copy', pub_date=bg_img.pub_date)
            img.save()
            return img
Run Code Online (Sandbox Code Playgroud)

现在,我可以执行以下操作:

获取用户

>>>m = User.objects.get(username='m')
Run Code Online (Sandbox Code Playgroud)

获取用户的个人资料图片集

>>>m_pro_set = m.profilepicture_set.all()
>>>m_pro_set
[<ProfilePicture: pro_mik>]
Run Code Online (Sandbox Code Playgroud)

从用户的背景图像获取图像对象

>>>m_back_1 = m.backgroundimage_set.get(id=2)
>>>m_back_1
<BackgroundImage: bg_mik>
Run Code Online (Sandbox Code Playgroud)

然后:

>>>profile_pic = ProfilePicture.create_from_bg(m_back_1)
Run Code Online (Sandbox Code Playgroud)

现在,当我检查它时,它确实创建了一个新实例。

>>>m_pro_set
[<ProfilePicture: pro_mik>,<ProfilePicture: bg_mik>]
Run Code Online (Sandbox Code Playgroud)

但是,如果我检查路径,甚至检查媒体文件夹,它的图像都是相同的,而不是图像文件的实际副本。

>>>profile_pic.image
<ImageFileField: uploaded_files/1389904144_ken.jpg>
>>>m_back_1.image
<ImageFileField: uploaded_files/1389904144_ken.jpg>
Run Code Online (Sandbox Code Playgroud)

我该如何file在模型中实际复制原始图像?任何帮助都感激不尽!谢谢。

django django-models django-orm django-views

4
推荐指数
1
解决办法
1380
查看次数

使用Django进行多个并发数据库事务?

是否可以在一个Django进程中使用多个并发事务?

具体来说,我有两个函数应同时执行(相互之间产生),但每个函数应在各自的事务中执行。例如:

def process_things(callback, things):
    with start_transaction():
        for thing in things:
            obj = Thing.objects.create(…)
            callback(obj)

def callback(obj):
    with start_separate_transaction():
        …
        ThingProcessingLog.objects.create(…)
Run Code Online (Sandbox Code Playgroud)

我希望每个函数都可以在独立的数据库事务中运行,因此在此示例中,ThingProcessingLog记录将被创建并立即可见,但是在Thing对象全部处理完之后这些对象才可见。

我该如何使用Django的ORM?

python django django-orm

4
推荐指数
1
解决办法
1273
查看次数

Django中的反向Queryset顺序

我想这个问题非常简单而且简短......

有没有简单的方法来反转Django中的查询集的顺序?

例:

li = [1,2,3]

queryset = Collection.objects.filter(pk__in = li)

django django-orm

4
推荐指数
2
解决办法
7354
查看次数

Django orm group by multiple columns

如何在Django中执行多列组?
我只看过一个列组的例子.
下面是我想要转换为Django ORM的查询.

SELECT order_id,city,locality,login_time,sum(morning_hours),sum(afternoon_hours),sum(evening_hours),sum(total_hours) 
FROM orders 
GROUPBY order_id,city,locality,login_time`
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm

4
推荐指数
1
解决办法
5212
查看次数