1

我正在尝试使用 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)

序列化器是

# 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 视图是

# 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服务器后,新条目正在正常创建,为什么会发生这种情况?

4

1 回答 1

1

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

user_id = columns.UUID(primary_key=True)

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

TestUserProf.create(address=add,emp_id='sree',user_id=uuid.uuid4())
于 2018-01-17T04:31:20.743 回答