我正在尝试使用cqlengine在Cassandra数据库中创建一个新条目,第一个帖子创建一个新条目,但是当尝试创建另一个条目时,最后一个项目使用新值更新,重新启动Django服务器后,它可以工作如预期的那样(创建新条目)
我的模特是
# test model udt
class address(UserType):
name = columns.Text()
age = columns.Integer()
street = columns.Text()
zipcode = columns.Integer()
class TestUserProf(Model):
user_id = columns.UUID(primary_key=True, default=uuid.uuid4())
emp_id = columns.Text()
address = columns.UserDefinedType(address)
Seializer
# Test serialzer for test udt
class TestProfSerializer(serializers.Serializer):
user_id = serializers.CharField(max_length=100, required=False)
emp_id = serializers.CharField(max_length=50)
user_addr = serializers.DictField(required=False, source='address')
def create(self, validate_data):
"""
Create new entry in ProfSerializer
:params validate_data
:return :
"""
addr_data = validate_data.get('address')
obj = TestUserProf.objects.create(
emp_id=validate_data.get('emp_id'),
address=address(
name=addr_data.get('name'),
age=addr_data.get('age'),
street=addr_data.get('street'),
zipcode=addr_data.get('zipcode')
)
)
return TestUserProf(**validate_data)
Django View是
# Test code for udt
class TestProfView(viewsets.ModelViewSet):
""" Test class of udf
:prams request
:return list of profils
"""
model = TestUserProf
serializer_class = TestProfSerializer
def get_queryset(self):
return TestUserProf.objects.all()
def create(self, request, *args, **kwargs):
serializer = TestProfSerializer(data=request.data)
try:
if serializer.is_valid():
serializer.save()
return Response({'status': 'success'})
else:
return Response({'status': 'not valid...'})
except Exception as e:
return Response({'error': str(e)})
发布数据
{
"emp_id": "EMP112",
"user_addr": {
"street": "Kochin",
"name": "Thomas John",
"zipcode": 682021,
"age": 29
}
}
它返回成功,但是当尝试创建新条目时,最后一个原始文件会更新,
重启Django服务器后,新条目正常创建, 为什么会这样?
答案 0 :(得分:1)
从模型中删除默认值,生成uuid,这会产生问题,uuid会继续生成相同的值,这就是更新最后一行的原因,即使您创建了新行也是如此。
user_id = columns.UUID(primary_key=True)
创建新行时,只需在该实例使用uuid.uuid4()
TestUserProf.create(address=add,emp_id='sree',user_id=uuid.uuid4())