相关疑难解决方法(0)

属性是否适用于django模型字段?

我认为问这个问题的最好方法是使用一些代码......我可以这样做吗?(编辑:答案:不)

class MyModel(models.Model):    
    foo = models.CharField(max_length = 20)    
    bar = models.CharField(max_length = 20)  

    def get_foo(self):  
        if self.bar:  
            return self.bar  
        else:  
            return self.foo  

    def set_foo(self, input):  
        self.foo = input  

    foo = property(get_foo, set_foo)  
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做:

是的,你必须这样做:

class MyModel(models.Model):
    _foo = models.CharField(max_length = 20, db_column='foo')
    bar = models.CharField(max_length = 20)

    def get_foo(self):
        if self.bar:
            return self.bar
        else:
            return self._foo

    def set_foo(self, input):
        self._foo = input

    foo = property(get_foo, set_foo)
Run Code Online (Sandbox Code Playgroud)

注意:通过将db_column传递给模型字段,可以将列名保留为数据库中的'foo'.当您处理现有系统并且不希望无缘无故地进行数据库迁移时,这非常有用

python django model properties

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

Django模型和Python属性

我试图用python属性设置一个Django模型,如下所示:

class Post(models.Model):
    _summary = models.TextField(blank=True)
    body = models.TextField()

    @property
    def summary(self):
        if self._summary:
            return self._summary
        else:
            return self.body

    @summary.setter
    def summary(self, value):
        self._summary = value

    @summary.deleter
    def summary(self):
        self._summary = ''
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,在控制台中我可以与摘要属性进行交互.但是当我尝试用它做任何事情时,就像Post(title="foo", summary="bar")它一样,它会引发一种契合.有没有办法让Django与Python属性玩得很好?

python django django-models

10
推荐指数
1
解决办法
7108
查看次数

Django - 模型字段和模型属性之间有什么区别?

在这个链接中(对于ReadOnlyField):http://www.django-rest-framework.org/api-guide/fields/#readonlyfield它说"当包含与一个相关的字段名称时,默认情况下使用此字段与ModelSerializer属性而不是模型字段".话虽如此,你能给我一个模型字段名称的例子,它是一个"属性",一个模型字段名称是一个"字段"吗?

django django-models

9
推荐指数
1
解决办法
4402
查看次数

Django ORM是否具有SQLAlchemy的混合属性?

SQLAlchemy中,混合属性是应用于ORM映射类的属性或方法,

class Interval(Base):
    __tablename__ = 'interval'

    id = Column(Integer, primary_key=True)
    start = Column(Integer, nullable=False)
    end = Column(Integer, nullable=False)

    def __init__(self, start, end):
        self.start = start
        self.end = end

    @hybrid_property
    def length(self):
        return self.end - self.start

    @hybrid_method
    def contains(self,point):
        return (self.start <= point) & (point < self.end)

    @hybrid_method
    def intersects(self, other):
        return self.contains(other.start) | self.contains(other.end)
Run Code Online (Sandbox Code Playgroud)

这允许在类和实例级别执行不同的行为,从而使使用相同代码评估SQL语句变得更加简单,

>>> i1 = Interval(5, 10)
>>> i1.length
5

>>> print Session().query(Interval).filter(Interval.length > 10)
SELECT interval.id AS interval_id, interval.start AS …
Run Code Online (Sandbox Code Playgroud)

python database django orm sqlalchemy

6
推荐指数
1
解决办法
1201
查看次数

如何使用自定义搜索字段(模型属性)在 Django Admin 中进行搜索?

这与这个问题非常相似,但不幸的是,我仍然无法让它工作。

我有一个模型,其属性组合了几个字段:

class Specimen(models.Model):
    lab_number = ...
    patient_name = ...
    specimen_type = ...

    @property
    def specimen_name(self):
        return f"{self.lab_number}_{self.patient_name}_{self.specimen_type}"
Run Code Online (Sandbox Code Playgroud)

在 Django Admin 中,当有人进行搜索时,我可以使用search_fieldsModel Admin 中的属性来指定真实字段,但不能指定specimen_name自定义字段:


def specimen_name(inst):
    return inst.specimen_name
specimen_name.short_description = "Specimen Name"

class SpecimenModelAdmin(admin.ModelAdmin):
    list_display = ('specimen_name', 'patient_name', 'lab_number', 'specimen_type')
    search_fields = ('patient_name', 'lab_number', 'specimen_type')
Run Code Online (Sandbox Code Playgroud)

使用上面的代码进行搜索,它将搜索各个字段,但如果我尝试在 Django Admin 中搜索完整的标本名称,它不会找到它,因为没有一个字段包含准确的完整标本名称。

我上面链接的 SO 问题为我指明了正确的方向 - 使用get_search_results. 我的代码现在看起来像这样:

class SpecimenModelAdmin(admin.ModelAdmin):
    ...
    search_fields = ('patient_name', 'lab_number', 'specimen_type')

    def get_search_results(self, request, queryset, search_term):
        if not search_term:
            return …
Run Code Online (Sandbox Code Playgroud)

python django

6
推荐指数
1
解决办法
3809
查看次数

如何在Django 1.4中自定义管理过滤器

我是Python和Django Development的新手,我从社区提供的简单阅读示例中学到了很多东西.但最近我想为Django附带的管理控制台实现自定义管理过滤器.我搜索了很多,只发现了一些过时的方法来完成它.例如: Django 1.3或更低版本的Django Admin中的自定义过滤器

我尝试在'django.contrib.admin'应用程序中阅读过滤器模块的源代码,但遗憾的是我很难理解代码背后的基本原理.所以我想知道某些人是否可以提供一些例子或参考这个问题---如何在Django 1.4中自定义管理过滤器?

提前致谢!

python django django-admin

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

在 Django 过滤器中使用 dateadd

我有一个按开始日期和持续时间(以天为单位)定义订阅期的模型:

class SubscriptionProduct(models.Model):    
    start_date = models.DateField()
    duration = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我需要能够过滤当前处于活动状态的订阅,例如start_date < now < start_date+duration

我找不到 django 的方式来做到这一点。我可以使用使用 postgres 的 DATEADD 等效的 INTERVAL 的原始 SQL 语句,但我更喜欢使用内置的和非数据库特定的东西。

我假设理想情况下我正在寻找 dateadd 注释方法。就像是:

SubscriptionProduct.objects.annotate(end_date=DateAdd('start_date','duration').filter(start_date__lt=datetime.now, end_date__gte=datetime.now)
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-orm

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