Аннотация x конфликтует с полем в модели

Я хочу удалить/заменить некоторые свойства из вызова list() при вызове Django rest framework. Например, у меня есть ip_address в таблице db, также добавляется ip_address при вызове perform_create(), но оно не должно отображаться/включаться при вызове list() и retrieve().

При повторных вызовах я могу сделать это, просто переопределив метод, добавив instance.ip_address = None.

Но теперь у меня проблема - при вызове list() мне нужно изменить свойства объекта queryset.

Я попробовал следующее,

o = ThreadedComment.objects.all()
o.annotate(ip_address=Value('', output_field=CharField())).all()

но я получил ошибку:

The annotation 'ip_address' conflicts with a field on the model.

Есть ли способ удалить/переопределить/заменить правильно на queryset в Django? Спасибо

Как я понял из вашего вопроса, в одном из ваших представлений, для методов list() и retrive(), вы хотите, чтобы ip_address не отображался или не был в ответе по какой-либо причине. Если я правильно понимаю, для этого у вас есть много решений, одно из которых - удаление поля из набора запросов по имени этого поля:

fields_to_display = [field.name for field in ThreadedComment._meta.get_fields()]
fields_to_display.remove('ip_address')
qs = ThreadedComment.object.all().values(*fields_to_display)

На данный момент я использую это обходное решение. В любом случае, это работает для меня, но я не уверен, что это лучшее, что я могу сделать. Пожалуйста, подскажите мне любые советы или подсказки, если у вас они есть.

def to_representation(self, instance):
        ret = super().to_representation(instance)
        if self.context["request"].method == "GET": ret.pop("ip_address")
        return ret
Вернуться на верх