首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django: NULL约束

Django: NULL约束
EN

Stack Overflow用户
提问于 2022-01-05 11:01:07
回答 1查看 621关注 0票数 1

我是django的新手,当我想要保存对象列表时会遇到一个错误。有两个对象霍珀(一个)和贸易(许多)。我不知道如何用正确的方式保存它。Hopper对象已经在数据库中。因此,我试图将料斗的id设置为交易对象的外设密钥。

这是保存tadeArray时的错误:

trade.hopper_id django.db.utils.IntegrityError: NULL约束失败:

这意味着当我试图拯救交易时,字段是空的,对吗?

型号(简称):

代码语言:javascript
运行
复制
class Trade(models.Model):
    # Relationships
    hopper = models.ForeignKey(Hopper, related_name='trades', on_delete=models.CASCADE)  # this should call the error :: django.db.utils.IntegrityError: NOT NULL constraint failed: trade.hopper_id

    # Fields
    id_db = models.IntegerField(primary_key=True, default=-1)
    # ... many attributes
    trigger_strategy = models.TextField(default=None)
    type = models.TextField(default=None)

    class Meta:
        # Set the table name.
        db_table = 'trade'

        # Set default ordering
        ordering = ['id']

        
class Hopper(models.Model):
    # Relationships
    id_db = models.IntegerField(primary_key=True, default=None)
    id = models.IntegerField(default=None)
    open_positions_count = models.TextField(default=None)
    name = models.TextField(default=None)
    exchange = models.TextField(default=None)
    hopper_id = models.TextField(default=None)
    # ... many attributes
    paper_trading = models.IntegerField(default=-1)
    start_balance = models.TextField(default=None)

序列化程序:

代码语言:javascript
运行
复制
class HopperSerializer(serializers.ModelSerializer):
    class Meta:
        model = Hopper

        fields = ['id',
                  'open_positions_count',
                  'name',
                  'exchange',
                  'hopper_id',
                  'subscription_id',
                  # ... many attributes
                  'paper_trading',
                  'start_balance',
                  ]

    def create(self, validated_data):
        return Hopper.objects.create(**validated_data)

class TradeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Trade

        fields = [
            'id',
            'exchange',
            'currency',
            'pair',
            # ... many attributes
            'buy_id',
            'is_short',
            'result_short']
        extra_kwargs = {
            'hopper': {'allow_null': True, 'required': False}
        }

    def create(self, validated_data):
        return Trade.objects.create(**validated_data)

views.py (调用这个def并抛出exeption)

代码语言:javascript
运行
复制
@api_view(('POST', 'GET'))
@csrf_exempt
def trades(request, hopper_id):
    if request.method == 'POST':
        data = request.data
        serializer = TradeSerializer(data=data, many=True)
        if serializer.is_valid():
            hopper = Hopper.objects.get(id=hopper_id)
            print(hopper)
            serializer.save() # at this point i stuck too. the id of the hopper must be saved with the trades
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

诚挚的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-05 11:13:10

代码语言:javascript
运行
复制
class Trade(models.Model):
    
    hopper = models.ForeignKey(Hopper, related_name='trades', on_delete=models.CASCADE, null=True, blank=True)
 # ... your other fields

我曾多次遇到 NULL约束失败的错误,我通过以上述方式设置字段来解决这个问题。通过设置hopper字段null=True,您是说您的数据库表示该字段可能没有任何值。所以这个错误就会被删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70591766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档