标签: django-models

Django post_save()信号实现

我有一个关于django的问题.

我在这里有ManyToMany模型

class Product(models.Model):
     name = models.CharField(max_length=255)
     price = models.DecimalField(default=0.0, max_digits=9, decimal_places=2)
     stock = models.IntegerField(default=0)

     def  __unicode__(self):
         return self.name

class Cart(models.Model):
    customer = models.ForeignKey(Customer)
    products = models.ManyToManyField(Product, through='TransactionDetail')
    t_date = models.DateField(default=datetime.now())
    t_sum = models.FloatField(default=0.0)

    def __unicode__(self):
         return str(self.id)

class TransactionDetail(models.Model):
    product = models.ForeignKey(Product)
    cart = models.ForeignKey(Cart)
    amount = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

对于创建的1个购物车对象,我可以插入尽可能多的新TransactionDetail对象(产品和金额).我的问题是.我该如何实现触发器?我想要的是每当创建交易细节时,我希望产品库存的数量减去transactiondetail中的金额.

我读过有关post_save()但我不确定如何实现它.也许这样的事情

when:post_save(TransactionDetail,Cart)#Cart对象,其中TransactionDetail.cart = Cart.id

post_save(TransactionDetail, 
       Cart) #Cart object where TransactionDetail.cart= Cart.id
Cart.stock -= TransactionDetail.amount
Run Code Online (Sandbox Code Playgroud)

python django django-signals django-models

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

如何将csv数据导入django模型

我有一些CSV数据,我想使用示例CSV数据导入django模型:

1;"02-01-101101";"Worm Gear HRF 50";"Ratio 1 : 10";"input shaft, output shaft, direction A, color dark green";
2;"02-01-101102";"Worm Gear HRF 50";"Ratio 1 : 20";"input shaft, output shaft, direction A, color dark green";
3;"02-01-101103";"Worm Gear HRF 50";"Ratio 1 : 30";"input shaft, output shaft, direction A, color dark green";
4;"02-01-101104";"Worm Gear HRF 50";"Ratio 1 : 40";"input shaft, output shaft, direction A, color dark green";
5;"02-01-101105";"Worm Gear HRF 50";"Ratio 1 : 50";"input shaft, output shaft, direction A, color dark green";
Run Code Online (Sandbox Code Playgroud)

我有一些名为Product的django型号.在产品还有像一些领域name,description …

python csv django export django-models

60
推荐指数
9
解决办法
10万
查看次数

如何将Django的GenericForeignKey限制为模型列表?

有没有办法告诉django具有contenttypes GenericForeignKey的模型只能指向预定义列表中的模型?例如,我有4个模型:A,B,C,D和一个包含GenericForeignKey的模型X. 我可以告诉X,GenericForeignKey只允许A和B吗?

django django-models django-forms django-admin django-contenttypes

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

Django modelform不是必填字段

我有一个这样的表格:

class My_Form(ModelForm):
    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')
Run Code Online (Sandbox Code Playgroud)

如何将地址字段设为可选?

django django-models django-forms optional

60
推荐指数
6
解决办法
5万
查看次数

Django:将一整套Model的对象转换为单个字典

如果你是从谷歌来这里寻找模特到dict,请跳过我的问题,然后跳到第一个答案.我的问题只会让你感到困惑.

在Django中有一个很好的方法将整个Model的对象集合到一个字典中吗?我的意思是,像这样:

class DictModel(models.Model):
    key = models.CharField(20)
    value = models.CharField(200)


DictModel.objects.all().to_dict()
Run Code Online (Sandbox Code Playgroud)

...结果是一个字典,其键/值对由模型中的记录组成?还有其他人认为这对他们有用吗?

谢谢. 我想添加的

更新
是我的最终目标是能够在模板中进行简单的变量查找.就像是:

{{ DictModel.exampleKey }}
Run Code Online (Sandbox Code Playgroud)

使用DictModel.objects.get(key__exact = exampleKey).value的结果

总的来说,你们真的让我感到惊讶的是你的回答是多么有用,以及接近它的方式有多么不同.非常感谢.

更新2011年10月: 如果您使用Google"django model_to_dict",这个问题是最重要的结果,这实际上非常糟糕,因为它解决了与我提出的问题不同的问题.

我想要的是能够将查询集中的所有实例映射到具有指定模型字段作为键的单个字典中.
另一方面,model_to_dict将单个模型实例转换为字典.

现在,我当时的需求非常具体,可能非常罕见(我甚至不记得我需要它的项目,或者为什么).所以任何寻找有关model_to_dict信息的人都会发现我的问题确实很有用,我会感到非常惊讶.抱歉.

model_to_dict似乎是一个比我更常见的用例.

2011年12月更新:
我改变了标题,希望能更好地反映我原来的意图.

python django dictionary django-models

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

如何更新django模型实例的多个字段?

我想知道,在django中更新模型实例的多个字段的标准方法是什么?......如果我有一些带有某些领域的模型,

Class foomodel(models.Model):
    field1 = models.CharField(max_length=10)
    field2 = models.CharField(max_length=10)
    field3 = models.CharField(max_length=10)
    ...
Run Code Online (Sandbox Code Playgroud)

...我用一个字段给出实例化,然后在一个单独的步骤中我想提供其余的字段,我如何通过传递字典或键值参数来做到这一点?可能?

换句话说,假设我有一个包含一些数据的字典,其中包含我要写入该模型实例的所有内容.模型实例已经在一个单独的步骤中实例化,让我们说它还没有被持久化.我可以说foo_instance.field1 = my_data_dict['field1']每个字段,但有些东西告诉我应该有一种方法在模型实例上调用一个方法,我只是立即传递所有的字段值对并更新它们.有点像foo_instance.update(my_data_dict).我没有看到任何这样的内置方法,我是否错过了它或者这是如何有效地完成的?

我有一种感觉,这是一个明显的,RTM类型的问题,但我只是没有在文档中看到它.

django django-models

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

Django模型字段验证

模型字段的验证应该在哪里进行django?

我可以命名至少两个可能的选择:在模型的重载.save()方法或models.Field子类的.to_python()方法中(显然,为了工作,你必须编写自定义字段).

可能的用例:

  • 当绝对需要确保时,空字符串不会写入数据库(空白= False关键字参数在此处不起作用,仅用于表单验证)
  • 当需要确保时,"choices"关键字参数在数据库级别上得到尊重,而不仅仅在管理接口中(仿真枚举数据类型)

empty_strings_allowedmodels.Field基类定义和派生类中还有一个类级别属性,它可以很好地覆盖它,但它似乎不会对数据库级别产生任何影响,这意味着我仍然可以使用空字符串字段构建模型并将其保存到数据库中.我想避免(是的,这是必要的).

可能的实现是

在现场一级:

class CustomField(models.CharField):
    __metaclass__ = models.SubfieldBase
    def to_python(self, value):
        if not value:
            raise IntegrityError(_('Empty string not allowed'))
        return models.CharField.to_python(self, value)
Run Code Online (Sandbox Code Playgroud)

在模型级别:

class MyModel(models.Model)
    FIELD1_CHOICES = ['foo', 'bar', 'baz']
    field1 = models.CharField(max_length=255, 
               choices=[(item,item) for item in FIELD1_CHOICES])

    def save(self, force_insert=False, force_update=False):
        if self.field1 not in MyModel.FIELD1_CHOICES:
            raise IntegrityError(_('Invalid value of field1'))
        # this can, of course, be made more generic
        models.Model.save(self, force_insert, force_update)
Run Code Online (Sandbox Code Playgroud)

也许,我错过了一些东西,这可以做得更容易(也更清洁)?

python django django-models

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

Django Unique Together(带外键)

我有一种情况,我想使用Meta选项unique_together来强制执行某个规则,这里是中间模型:

class UserProfileExtension(models.Model):
    extension = models.ForeignKey(Extension, unique=False)
    userprofile = models.ForeignKey(UserProfile, unique=False)
    user = models.ForeignKey(User, unique=False)  

    class Meta:
        unique_together = (("userprofile", "extension"),
                           ("user", "extension"),
                           # How can I enforce UserProfile's Client 
                           # and Extension to be unique? This obviously
                           # doesn't work, but is this idea possible without
                           # creating another FK in my intermediary model 
                           ("userprofile__client", "extension"))
Run Code Online (Sandbox Code Playgroud)

这是UserProfile:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    client = models.ForeignKey(Client)
Run Code Online (Sandbox Code Playgroud)

谢谢.

python django-models

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

如何在Django REST框架中注册用户?

我正在使用Django REST框架编写REST API .API将成为社交移动应用的后端.在学完本教程之后,我可以序列化所有模型,并且能够创建新资源并更新它们.

我正在使用AuthToken进行身份验证.

我的问题是:

一旦我拥有了/users资源,我希望app用户能够注册.那么,拥有一个单独的资源/register或允许匿名用户POST到/users新资源更好吗?

此外,关于权限的一些指导会很棒.

django django-models python-2.7 django-rest-framework

58
推荐指数
10
解决办法
5万
查看次数

Django休息框架序列化很多到很多领域

如何将多对多字段序列化为某些列表,并通过休息框架返回它们?在下面的示例中,我尝试将帖子与一个与之关联的标签列表一起返回.

models.py

class post(models.Model):
    tag = models.ManyToManyField(Tag)
    text = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

serializers.py

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ("text", "tag"??)
Run Code Online (Sandbox Code Playgroud)

views.py

class PostViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
Run Code Online (Sandbox Code Playgroud)

python django django-models django-serializer django-rest-framework

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