udt in cassandra cqlengine Django,在尝试创建新条目时更新最新条目

时间:2018-01-09 09:43:09

标签: django cassandra django-rest-framework cassandra-2.0 cqlengine

我正在尝试使用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服务器后,新条目正常创建, 为什么会这样?

1 个答案:

答案 0 :(得分:1)

从模型中删除默认值,生成uuid,这会产生问题,uuid会继续生成相同的值,这就是更新最后一行的原因,即使您创建了新行也是如此。

user_id = columns.UUID(primary_key=True)

创建新行时,只需在该实例使用uuid.uuid4()

TestUserProf.create(address=add,emp_id='sree',user_id=uuid.uuid4())