django - 如何在 Django Rest Framework 中创建触发器来更改布尔字段?
问题描述
我在 django rest 框架中有一个问题。由于我正在学习如何使用一些高级选项,所以我不太明白。每次将外键插入表时,我当前都需要更改布尔字段。我怎样才能在模型中做到这一点?
模型:
class Persona(models.Model):
name = models.CharField(max_length=32)
cart = models.ForeignKey(Credit,null=True)
rg = models.IntergerField()
end = models.CharField(max_length=256)
details = models.TextField(blank=True, null=True)
order = models.ForeignKey(Order, null=True)
def __str__(self):
return self.cart
class Meta:
db_table='person'
app_label = 'bank'
class Credit(models.Model):
number = models.CharField(max_length=16, unique=True)
create_at = models.DateField(auto_add_now=True)
updated_at = models.DateField()
available = models.BooleanField()
def __str__(self):
return self.number
class Meta:
db_table = 'credit'
app_label = 'bank'
序列化器:
class PersonaSerializer(serializers.ModelSerializer):
order__id = serializers.ReadOnlyField(source='order.id')
class Meta:
model = Persona
fields = '__all__'
class Persona(viewsets.ModelViewSet):
allowed_methods = ('GET', 'POST', 'PUT', 'PATCH')
queryset = Persona.objects.all()
serializer_class = PersonaSerializer
解决方案
您可以覆盖上的create
方法ModelSerializer
来实现此目的:
def create(self, validated_data):
cart = validated_data['cart']
persona = super(PersonaSerializer, self).create(validated_data)
cart.available = True # update boolean
cart.save()
return persona
您可以在文档中阅读更多相关信息
如果你想在你的模型中处理这个,你可以覆盖 Persona 模型save
方法:
class Persona(models.Model):
name = models.CharField(max_length=32)
cart = models.ForeignKey(Credit,null=True)
rg = models.IntergerField()
end = models.CharField(max_length=256)
details = models.TextField(blank=True, null=True)
order = models.ForeignKey(Order, null=True)
def __str__(self):
return self.cart
class Meta:
db_table='person'
app_label = 'bank'
def save(self, *args, **kwargs):
# Will only update the available field when the Persona
# instance is created and the cart field is not null
if not self.pk and self.cart:
self.cart.available = True
self.cart.save()
return super(Persona, self).save(*args, **kwargs)
推荐阅读
- .net - Azure 管道 NuGet 还原无法在 csproj 文件中设置 MsBuild 属性
- javascript - 以编程方式将 Angular DateTime 管道用于 hh:mm:ss 格式
- mysql - 如何从 MySQL 存储过程中的临时表中进行选择?
- sql-server - INSERT 语句与外键约束冲突 - SQL Server/Entity Framework Core
- javascript - Firebase-tool 错过了在本地测试模式下将我的 Js 文件作为 HTML 文件发送
- python - 我无法将 numpy 数组转换为 pandas 列。数据必须是一维/索引错误
- javascript - 在这里我试图返回文件数组,但它返回未定义
- reactjs - React Hook:setState 用法
- solr - 如何在 SOLR 中找到单复数和不同的措辞情况
- c++ - 不允许不完整的类型,函数 dec/def 并且没有类