标签: django-models

如何将数据添加到ManyToMany字段?

我无法在任何地方找到它,所以你的帮助对我来说很好:)这是这个领域:

categories = models.ManyToManyField(fragmentCategory)
Run Code Online (Sandbox Code Playgroud)

FragmentCategory:

class fragmentCategory(models.Model):

        CATEGORY_CHOICES = (
                        ('val1', 'value1'),
                        ('val2', 'value2'),
                        ('val3', 'value3'),
                        )

        name = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
Run Code Online (Sandbox Code Playgroud)

这是要发送的表单:

<input type="checkbox" name="val1" />
<input type="checkbox" name="val2" />
<input type="checkbox" name="val3" />
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

categories = fragmentCategory.objects.get(id=1),
Run Code Online (Sandbox Code Playgroud)

要么:

categories = [1,2]
Run Code Online (Sandbox Code Playgroud)

django django-models

64
推荐指数
2
解决办法
7万
查看次数

在Django admin中覆盖默认查询集

我的一个模型有一个删除标志,用于全局隐藏对象:

class NondeletedManager(models.Manager):
    """Returns only objects which haven't been deleted"""

    def get_query_set(self):
        return super(NondeletedManager, self).get_query_set().exclude(deleted=True)

class Conversation(BaseModel):
    ...
    deleted = models.BooleanField(default=False)
    objects = NondeletedManager()
    all_conversations = models.Manager() # includes deleted conversations
Run Code Online (Sandbox Code Playgroud)

如何覆盖Django管理模块使用的默认查询集以包含已删除的对话?

django django-models django-admin

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

django模板系统,调用模型中的函数

我想在模板中调用我的模型中的函数,例如:

class ChannelStatus(models.Model):
 ..............................
 ..............................

    def get_related_deltas(self,epk):
        mystring = ""
        if not self.get_error_code_delta(epk):
            return mystring
        else:
            for i in self.get_listof_outage():
                item = i.error_code.all()
                for x in item:
                    if epk == x.id:
                        mystring= mystring +" "+str(i.delta())
        return mystring         
Run Code Online (Sandbox Code Playgroud)

当我想从模板中调用它时:假设在渲染时,我将channel_status_list作为

channel_status_list = ChannelStatus.objects.all()

{% for i in channel_status_list %}
  {{ i.get_related_deltas(3) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这不起作用,我可以调用一个不消耗任何东西的函数,但是如果它有参数则无法找到该怎么做

干杯

python django django-templates django-models

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

Django:我应该如何存储货币价值?

我在这里遇到了范式问题.我不知道是否应该将钱存储为Decimal(),或者我是否应该将其存储为字符串并将其自身转换为小数.我的理由是这样的:

PayPal需要2个小数位,所以如果我有一个49美元的产品,PayPal希望看到49.00遇到问题.Django的DecimalField()不设置小数.它只存储最大小数位数.所以,如果你有49个,并且你将字段设置为2个小数位,它仍然将它存储为49.我知道Django基本上是类型转换,当它从数据库反序列化为Decimal时(因为数据库)没有十进制字段),所以我并不完全关心速度问题,就像我遇到这个问题的设计问题一样.我想做可扩展性最好的事情.

或者,更好的是,是否有人知道如何配置django DecimalField()以始终使用TWO_PLACES格式样式进行格式化.

python django currency decimal django-models

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

Django,从模型方法查询过滤

我有这些模型:

def Foo(Models.model):
    size = models.IntegerField()
    # other fields

    def is_active(self):
         if check_condition:
              return True
         else:
              return False

def Bar(Models.model):
     foo = models.ForeignKey("Foo")
     # other fields
Run Code Online (Sandbox Code Playgroud)

现在我想要查询具有活动Foo的条形码:

Bar.objects.filter(foo.is_active())
Run Code Online (Sandbox Code Playgroud)

我收到的错误如

SyntaxError at /
('non-keyword arg after keyword arg'
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python django django-models django-orm django-queryset

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

Django在ManyToMany计数上过滤模型?

假设我的models.py中有类似的东西:

class Hipster(models.Model):
  name = CharField(max_length=50)

class Party(models.Model):
  organiser = models.ForeignKey()
  participants = models.ManyToManyField(Profile, related_name="participants")
Run Code Online (Sandbox Code Playgroud)

现在在我的views.py中,我想做一个查询,它将为有超过0个参与者的用户取一个派对.

这样的事情可能是:

user = Hipster.get(pk=1) 
hip_parties = Party.objects.filter(organiser=user, len(participants) > 0)
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方式是什么?

django django-models django-queryset

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

Django:如何动态创建模型以进行测试

我有一个Django应用程序,需要一个settings以下形式的属性:

RELATED_MODELS = ('appname1.modelname1.attribute1',
                  'appname1.modelname2.attribute2', 
                  'appname2.modelname3.attribute3', ...)
Run Code Online (Sandbox Code Playgroud)

然后挂钩他们的post_save信号,根据attributeN定义更新一些其他固定模型.

我想测试这种行为,测试应该工作,即使这个应用程序是项目中唯一的一个(除了它自己的依赖项,不需要安装其他包装应用程序).如何为测试数据库创建和附加/注册/激活模拟模型?(或者它可能吗?)

允许我使用测试夹具的解决方案会很棒.

python django unit-testing mocking django-models

62
推荐指数
7
解决办法
2万
查看次数

如何在模型用户中使用Django中的contrib.auth创建独特的电子邮件字段

我需要contrib.auth通过确保电子邮件字段条目是唯一的来修补标准用户模型:

User._meta.fields[4].unique = True
Run Code Online (Sandbox Code Playgroud)

代码中最好的位置在哪里?

我想避免使用数字字段[4].用户字段['email']更好,但字段不是字典,只是列表.

另一个想法可能是打开一个新票证并上传一个带有新参数的补丁settings.py:

AUTH_USER_EMAIL_UNIQUE = True
Run Code Online (Sandbox Code Playgroud)

有关在Django用户模型中实现电子邮件地址唯一性的最正确方法的任何建议吗?

django django-models

62
推荐指数
7
解决办法
5万
查看次数

如何以编程方式获取Django模型字段的max_length?

假设我有一个像这样的Django类:

class Person(models.Model):
    name = models.CharField(max_length=50)
    # ...
Run Code Online (Sandbox Code Playgroud)

我如何以编程方式获得max_lengthname字段的值?

python oop django django-models

62
推荐指数
2
解决办法
9989
查看次数

Django:CharField有固定长度,怎么样?

我希望在我的模型中有一个固定长度的CharField.换句话说,我希望只有指定的长度才有效.

我试着做点什么

volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误(似乎我可以同时使用max_length和min_length).

还有另一种快捷方式吗?

谢谢

编辑:

根据一些人的建议,我会更具体一些:

我的模型是这样的:

class Volume(models.Model):
    vid = models.AutoField(primary_key=True)
    jid = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
    volumenumber = models.CharField('Volume Number')
    date_publication = models.CharField('Date of Publication', max_length=6, blank=True)
    class Meta:
        db_table = u'volume'
        verbose_name = "Volume"
        ordering = ['jid', 'volumenumber']
        unique_together = ('jid', 'volumenumber')
    def __unicode__(self):
        return (str(self.jid) + ' - ' + str(self.volumenumber))
Run Code Online (Sandbox Code Playgroud)

我想要的是volumenumber必须是4个字符.

IE如果有人插入'4b'django会出错,因为它需要一个4个字符的字符串.

所以我尝试了

volumenumber = models.CharField('Volume Number', max_length=4, min_length=4)
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

Validating models...
Unhandled exception …
Run Code Online (Sandbox Code Playgroud)

django django-models

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