#django #django-rest-framework
Вопрос:
У меня странная ошибка. У меня есть представление под названием «Неправильное соответствие», которое люди, использующие мое приложение, могут предложить изменить, если ссылка неверна. Это делается по почтовому запросу.
Когда я делаю неправильное сопоставление внутри просматриваемого API, я могу ввести его подробное представление, и форма PUT html заполнена правильно, но для тех, которые поступают из запроса POST, первое поле в форме PUT html по умолчанию является первой записью в базе данных. Однако для меня обе записи выглядят одинаково.
На этом рисунке показаны две записи, первая из которых опубликована из приложения, а вторая сделана в просматриваемом API.
Это показывает подробное представление первой записи, но, как видно из html-формы PUT, по умолчанию пиво является первым в базе данных, а не тем, которое указано в записи.
Это показывает подробное представление второй записи, добавленной из просматриваемого API. Здесь поле в форме PUT html отображается правильно.
Используемый набор представлений довольно прост.
class WrongMatchViewSet(ModelViewSet):
queryset = WrongMatch.objects.all()
serializer_class = WrongMatchSerializer
pagination_class = Pagination
permission_classes = [permissions.AllowAny]
And the serializer:
class WrongMatchSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name="wrongmatch-detail")
beer_name = serializers.CharField(read_only=True, source="beer.vmp_name")
current_untpd_url = serializers.CharField(read_only=True, source="beer.untpd_url")
current_untpd_id = serializers.CharField(read_only=True, source="beer.untpd_id")
class Meta:
model = WrongMatch
fields = [
"url",
"beer",
"beer_name",
"current_untpd_url",
"current_untpd_id",
"suggested_url",
"accept_change",
]
def update(self, instance, validated_data):
instance.beer = self.validated_data["beer"]
instance.suggested_url = self.validated_data["suggested_url"]
instance.accept_change = self.validated_data["accept_change"]
if instance.accept_change == True:
b = instance.beer
b.untpd_url = instance.suggested_url
b.untpd_id = instance.suggested_url.split("/")[-1]
b.prioritize_recheck = True
b.verified_match = True
b.match_manually = False
b.save()
instance.delete()
return instance
У кого-нибудь есть хоть малейшее представление о том, почему это происходит? Идентификатор пива указан правильно в записи поста, а имя пива и другая информация также соответствуют правильному пиву. Идея состоит в том, чтобы я просто просмотрел эти записи, установил значение «Принять изменение» в значение «истина», и изменение происходит автоматически, но когда запись о пиве неверна в форме ВВОДА, это создает беспорядок и помещает информацию туда, где ей не место.