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)

ジャンゴビューは

# 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
        }
    }

成功を返しますが、新しいエントリを作成しようとすると、最後の raw が更新され、

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 に答える