Я не могу сохранить одно поле в моем Django REST API методом PUT - PullRequest
0 голосов
/ 03 августа 2020

Не могу редактировать / обновлять элементы поля . Это ArrayField, который я хочу отредактировать с помощью JSON

    {
        ...
        "members": [2,3],
        ...
    }

. Все поля доступны для редактирования, кроме поля members . Поле перестало обновляться после добавления в него поисковых фильтров. В чем может быть проблема?

У меня есть этот код в модуле Company

admin.py

class ArrayFieldListFilter(admin.SimpleListFilter):
    title = 'Members'
    parameter_name = 'members'
    def lookups(self, request, model_admin):
        members = Company.objects.values_list("members", flat=True)
        members = [(kw, kw) for sublist in members for kw in sublist if kw]
        members = sorted(set(members))
        return members
    def queryset(self, request, queryset):
        lookup_value = self.value()
        if lookup_value:
            queryset = queryset.filter(members__contains=[lookup_value])
        return queryset
# Register your models here.
class CompanyAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'user', 'members', 'theme', 'date_created', 'description', 'status')
    list_display_links = ('id', 'name')
    list_filter = (ArrayFieldListFilter, 'name', 'user', 'members', 'date_created')

admin.site.register(Company, CompanyAdmin)

models.py

# Create your models here.
class Company(models.Model):
    members = ArrayField(models.IntegerField(blank=True), 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__'

class CompanySerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=False)
    members = serializers.SerializerMethodField()
    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
...
...