#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Я пытаюсь повысить ценность модели InstantInvestment в среде Django REST, которая работает. но я хочу показать только доставку, предназначенную специально для пользователя, вошедшего в систему. это означает, что в нынешней ситуации вся доставка предоставляется не для этого пользователя.
models.py
class Shipping(models.Model):
investor = models.ForeignKey(User, related_name='shipping', on_delete=models.CASCADE)
beneficiary = models.CharField("Beneficiary Name", max_length=150)
bank = models.ForeignKey(Bank, related_name="bank", on_delete=models.CASCADE)
account = models.CharField(max_length=10)
address = models.TextField("Shipping Adresss")
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.beneficiary
class Meta:
verbose_name = 'Shipping'
verbose_name_plural = 'Shippings'
class InstantInvestment(models.Model):
investor = models.ForeignKey(User, related_name='instantivestment', on_delete=models.CASCADE)
ref_code = models.CharField(max_length=200, blank=True, null=True)
investment = models.FloatField("Investment in dollar")
rate = models.FloatField("Exchange Rate")
transferable = models.FloatField("Money Transferable")
conversion = models.FloatField("Rate in Naira")
product = models.ForeignKey(Product, related_name='instant_product', on_delete=models.CASCADE)
shipping = models.ForeignKey(Shipping, related_name='shipping', on_delete=models.CASCADE)
done = models.BooleanField("Completed Transaction", default=False)
created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.investor.get_full_name()} - Transaction Code: {self.ref_code}'
class Meta:
verbose_name = 'InstantInvestment'
verbose_name_plural = 'InstantInvestments'
serializers.py
class ShippingSerializer(serializers.ModelSerializer):
class Meta:
model = Shipping
fields = ('beneficiary', 'bank', 'account', 'address')
class QucikPaymentSerializer(serializers.ModelSerializer):
class Meta:
model = InstantInvestment
fields = ('url', 'id','investment', 'rate', 'transferable', 'conversion', 'product', 'shipping')
views.py
class QuickPaymentView(viewsets.ModelViewSet):
queryset = InstantInvestment.objects.all()
serializer_class = QucikPaymentSerializer
permission_classes = [ permissions.IsAuthenticated ]
def get_queryset(self):
return InstantInvestment.objects.filter(investor=self.request.user, done=False)
def perform_create(self, serializer):
serializer.save(investor=self.request.user)
Комментарии:
1. Вы пробовали добавлять
shipping__investor=self.request.user
в свой ModelViewSet?2. какова связь между инвестором InstantInvestment и инвестором в доставку?
3. доставка = модели. ForeignKey(доставка, related_name=’доставка’, on_delete=модели. КАСКАД)
4. как мне это разместить — shipping__investor=self.request.user
5. В вашем
def get_queryset(self):
Ответ №1:
Удалите атрибут набора запросов в вашем классе viewset
class QuickPaymentView(viewsets.ModelViewSet):
serializer_class = QucikPaymentSerializer
permission_classes = [ permissions.IsAuthenticated ]
def get_queryset(self):
return InstantInvestment.objects.filter(investor=self.request.user, done=False)
def perform_create(self, serializer):
serializer.save(investor=self.request.user)
чтобы это работало, вам необходимо указать аргумент ключевого слова basename при регистрации вашего класса viewset в router.
router.register(r'quickpayment/' , QuickPaymentView , basename='InstantInvestment')
Комментарии:
1. У меня нет проблем с этим. При создании нового quickPaymentView мне нужна доставка, принадлежащая текущему пользователю. Текущая ситуация сейчас показывает всю доставку в базе данных
2. Вы упоминаете HTML-форму, в которой вы показали вопрос?
3. ДА… Мне нужна доставка, чтобы показать единственный ввод от пользователя
Ответ №2:
Если вы хотите сделать это, вам нужно написать html отдельно. Я думаю, что вы показали в своем вопросе интерфейс rest framework для тестирования api. Этот пользовательский интерфейс не может определить пользователя до отправки запроса.