Django Rest:仅在创建时的模型字段默认值 [英] Django Rest : Model field default value only while creating

查看:334
本文介绍了Django Rest:仅在创建时的模型字段默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含2个字符的模型。我想在创建行时给它们默认值。这个默认值是依赖于时间的ID。这个ID不应该改变。即在行上发生后续更新时,不应该应用默认值。



我试图使用 update_or_create ,但是在创建&更新不一样。只有在更新时创建和忽略时,如何放置这些ID?



我是指回答,但没有运气。



编辑:



以下是代码供参考:



型号:

  class UsersModel(models.Model):
id = models.CharField(db_column =id,max_length = 25,primary_key = True)
key = models.CharField(db_column =key,max_length = 100)
a = models.CharField(db_column = a,max_length = 25,null = True,blank = True)
b = models.BigIntegerField(db_column =b,null = True,blank = True)

视图:

  def post(self,request ,format = None):
UsersModel.objects.update_or_create(a =a_val,defaults = {b:b_val})

这里,我想要id&在创建行时使用默认值的键。当更新时,只有 b 应该如上代码所示更新。

解决方案

通过覆盖模型的保存功能也可以实现相同的模式。确保在创建模型时,在您的情况下,为id和key赋予一个值(默认值)。

  class UsersModel(models.Model):
id = models.CharField(db_column =id,max_length = 25,primary_key = True)
key = models.CharField(db_column =key,max_length = 100)
a = models.CharField(db_column =a,max_length = 25,null = True,blank = True)
b = models.BigIntegerField(db_column =b,null = True,blank = True)

def save():
如果不是self.id:
self.id = get_default('id')
如果不是self.key:
self.key = get_default('key')
super(UsersModel,self).save(* args,** kwargs)

这将确保您创建和更新时, t save save被调用,这些变量在获取保存在db中之前被分配一个默认值。


I have a model with 2 char-fields. I want to give them default values when a row is getting created. This default values are sort of IDs which depends on time. This ID should never change. i.e. the default value should not be applied when subsequent updates happen on the row.

I'm trying to use update_or_create but, the defaults while creating & updating are not same. How can I put these Ids only while creating and ignore while updating?

I'm referring to this answer but no luck.

EDIT:

Following is the code for reference:

Model:

class UsersModel(models.Model):
    id = models.CharField(db_column="id", max_length=25, primary_key=True)
    key = models.CharField(db_column="key", max_length=100)
    a = models.CharField(db_column="a",max_length=25, null=True, blank=True)
    b = models.BigIntegerField(db_column="b", null=True, blank=True)

Views:

def post(self, request, format=None):
    UsersModel.objects.update_or_create(a="a_val",defaults={"b":"b_val"})

Here, I want the id & key to take default values when the row is being created. When it is being updated, only b should get updated as shown in above code.

解决方案

The same can be achieved by overiding the save function of models.Model to ensure that an id and key is given a value(default) in your case if the model is being created.

class UsersModel(models.Model):
    id = models.CharField(db_column="id", max_length=25, primary_key=True)
    key = models.CharField(db_column="key", max_length=100)
    a = models.CharField(db_column="a",max_length=25, null=True, blank=True)
    b = models.BigIntegerField(db_column="b", null=True, blank=True)

    def save():
        if not self.id:
            self.id=get_default('id')
        if not self.key:
            self.key=get_default('key')
        super(UsersModel, self).save(*args, **kwargs)

This will ensure when you create and update, the first time save is called, these variables are assigned a default value before getting saved in the db.

这篇关于Django Rest:仅在创建时的模型字段默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆