Как я могу разрешить ошибку, если значение null в столбце user_id нарушает ограничение not-null? - PullRequest
0 голосов
/ 06 августа 2020

Я не могу добавить новый элемент в базу данных. Выдается ошибка, что поле пользователь не добавлено. Я получаю сообщение об ошибке значение null в столбце user_id нарушает ограничение not-null Что значит? Как я могу решить эту проблему?

models.py

class Company(models.Model):
    name = models.CharField(max_length=40, blank=True)
    user =  models.ForeignKey(User, verbose_name='User', on_delete=models.CASCADE) #models.IntegerField(blank=True)
...

serializers.py

class AccountSerializer(serializers.ModelSerializer):
    user=serializers.StringRelatedField(read_only=False)
    class Meta:
        model=Account
        fields='__all__'

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
    def create(self, validated_data):
        # address_data = validated_data.pop('address')
        # address = Address.objects.create(**address_data)
        # validated_data['address'] = address
        user = User.objects.create(**validated_data)

class CompanySerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        try:
            if self.context['request'].method in ['GET']:
                self.fields['members'] = serializers.SerializerMethodField()
        except KeyError:
            pass
            
    class Meta:
        model = Company
        fields = '__all__' #('id', 'name', 'description', 'date_created', 'user', 'status', 'theme', 'members')
        
    def get_members(self, obj):
        accounts = Account.objects.filter(id__in=obj.members)
        return AccountSerializer(accounts, many=True).data
        
class CompanyListSerializer(serializers.ModelSerializer):
    # memb = serializers.ReadOnlyField(source='members.user')
    class Meta: 
        model = Company
        fields = '__all__'

1 Ответ

1 голос
/ 06 августа 2020

Объект в вашей пользовательской таблице (не предоставлен) может нарушать основное ограничение user_id. Вы должны попытаться получить доступ к своей базе данных вручную (если данные ценны) и добавить некоторое значение в это поле во всех связанных записях.

Ваша пользовательская таблица должна сгенерировать первичное ограничение, например, user_id, при создании объекта, в противном случае вам нужно будет его предоставить.

Сериализатор не работает, потому что ваш ORM не принимает запись (без user_id), которая нарушает схему.

...