Django Rest:仅在创建时的模型字段默认值 [英] Django Rest : Model field default value only while creating
问题描述
我试图使用 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屋!