小编Oli*_*r H的帖子

Django:列出模型的所有反向关系

我希望我的django应用程序能够提供任何模型字段的列表(这将有助于GUI构建本身).

想象一下这些课程(忽略所有领域Steps都可以进入的事实Item,我有我的理由:-))

class Item(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

class Steps(models.Model):
    item = models.OneToOneField('Item', related_name='steps')
    design = models.BooleanField(default=False)
    prototype = models.BooleanField(default=False)
    production = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

现在,当我想列出模型的字段时:

def get_fields(model):
    return model._meta.fields + model._meta.many_to_many
Run Code Online (Sandbox Code Playgroud)

但我还想获得我的模型的"相关"一对一外键列表.在我的情况下Item.steps不会在该列表中.

我发现model._meta.get_all_field_names确实包括所有相关领域.

但是当我调用Item._meta.get_field_by_name('steps')它时会返回一个持有a的元组RelatedObject,它不会立即告诉我这是单个关系还是一对多关系(我想仅列出一对一的反向关系).

另外,我可以使用这段代码:

from django.db.models.fields.related import SingleRelatedObjectDescriptor
reversed_f_keys = [attr for attr in Item.__dict__.values() \
                  if isinstance(attr, SingleRelatedObjectDescriptor)]
Run Code Online (Sandbox Code Playgroud)

但我对此并不十分满意.

欢迎任何帮助,想法,提示!

干杯

python django foreign-key-relationship

14
推荐指数
2
解决办法
5229
查看次数

是否可以让WAMP以用户[我自己]而不是本地SYSTEM运行httpd.exe?

mod_wsgi使用WAMP 在apache上运行django应用程序.

某个URL允许我流式传输图像文件的内容,其路径存储在数据库中.

无论是在本地计算机上还是在网络驱动器(\\my\network\folder)下,都可以找到这些文件.

使用开发服务器(manage.py runserver),我可以毫无困难地阅读和传输文件.

使用WAMP和网络驱动器文件,我得到一个IOError:显然是因为httpd实例没有对所述驱动器的读取权限.

在任务管理器中,我看到httpd.exeSYSTEM运行.我想告诉WAMP以[我自己]的身份运行服务器,因为我对共享文件夹有读写权限.(最终,生产服务器应由具有权限的'www-admin'用户运行)

映射驱动器号上的网络共享文件夹(例如Z:)根本无法解决此问题.

用户/组指令httpd.conf似乎对Apache的行为没有任何影响.

我还注意到:我试图复制下面的HKLM\[...]\wampapache注册表项HK_CURRENT_USER\并重命名原始密钥,但是当我cmd这个时,似乎找不到新密钥

> httpd.exe -n wampapache -k start
Run Code Online (Sandbox Code Playgroud)

或者当我运行WAMP时.

我已经没想完了:)

有没有人遇到过同样的问题?

apache wamp

7
推荐指数
1
解决办法
9527
查看次数

Django:当关系结束被删除时,m2m_changed没有被触发

注意:由于生产环境的限制,我必须坚持django-1.4到目前为止.

我刚刚做了一个测试,看看当ManyToMany改变时我是否可以挂钩事件.

我有一个Group包含几个Item对象的模型.每当项目在任何组中发生变化时,我都希望对相关的Group`实例做一些事情.

from django.db import models
    from django.db.models.signals import m2m_changed, post_delete, pre_delete

class Item(models.Model):
    name = models.CharField(max_length=32)

    def __str__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=32)
    items = models.ManyToManyField(to=Item)    

def items_changed(signal, sender, action, instance, reverse, model, pk_set, using, **kwargs):
    print str(signal)
    print action, instance, reverse, pk_set

m2m_changed.connect(items_changed, sender=Group.items.through)
Run Code Online (Sandbox Code Playgroud)

如果我更改实例items上的列表Group,那么m2m_changed事件显然会被触发.

>>> from sandbox.core.models import Group, Item
>>> item, created = Item.objects.get_or_create(name='f')
>>> g = Group.objects.get(pk=1)
>>> g.items.add(item) …
Run Code Online (Sandbox Code Playgroud)

python django many-to-many signals django-orm

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