У меня проблема с моей моделью и сериализацией, я выполняю внутреннее соединение двух таблиц следующим образом:
# file views.py from Wallet
class WalletBalances(generics.ListAPIView):
serializer_class = WalletSerializer
def get_object(self, current_user):
return Wallet.objects.filter(currencysys__id=F('currencysys_id'),
user_id=current_user)
def get(self, request, format=None):
current_user = request.user
list_balances = self.get_object(current_user.id)
serializer = self.serializer_class(list_balances, many=True)
get_data = serializer.data
return JsonResponse({'data': get_data}, safe=False,
status=status.HTTP_200_OK)
ошибка показывает мне = "объект CurrencySys не повторяется"
мой файловый кошелек / сериализация
from other_project.serializers import CurrencySysSerializer
class WalletSerializer(serializers.ModelSerializer):
# currencysys = CurrencySysSerializer(many=True)
currencysys = serializers.StringRelatedField(many=True)
class Meta:
model = Wallet
fields = '__all__'
мои модели:
# Currency / models.py
class CurrencySys(models.Model):
currency_symbol = models.CharField(max_length=45, blank=True)
currency_name = models.CharField(max_length=45, blank=True)
currency_status = models.BooleanField(blank=True)
currency_crypto = models.BooleanField(blank=True)
# wallet / models.py
class Wallet(models.Model):
addresskey = models.CharField(max_length=40, blank=True)
name_wallet = models.CharField(max_length=45, blank=True)
currencysys = models.ForeignKey(CurrencySys,
on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
зачем показывать мне эту ошибку и как исправить эту проблему, пожалуйста, помогите мне
Спасибо за внимание.
привет, CurrencySys - это просто имя, это была ошибка типа, мой класс - Currencysys, извините за путаницу.





currencysys - это отдельный объект внешнего ключа. Таким образом, для этого вам не нужен аргумент many=True:
class WalletSerializer(serializers.ModelSerializer):
# currencysys = CurrencySysSerializer(many=True)
currencysys = serializers.StringRelatedField()
class Meta:
model = Wallet
fields = '__all__'
спасибо, правильно, я решил свою проблему, но просто покажите мне поля таблицы кошелька, а не другие поля Currencysys, пожалуйста, как показать все данные, такие как «выберите * из ....», пожалуйста
@AngelOmarRojasPacheco В этом случае вам нужно удалить строку currencysys = serializers.StringRelatedField() и добавить depth=1 в мета. Подробности здесь: django-rest-framework.org/api-guide/serializers/…
Что означает
CurrencySys, в частности, что означает частьSys? Почему вы ставите перед атрибутами классаCurrencySysпрефиксcurrency_? Это ужасная практика. Django сделает их внутренним префиксом. Теперь у вас есть совершенно беспорядочные имена столбцов в вашей базе данных.