Django: Как передать имя строки вместо внешнего идентификатора при создании объекта - PullRequest
0 голосов
/ 03 августа 2020

У меня есть две таблицы: Адрес доставки и Счет-фактура таблица, связанная через ForeignKey. Я создал файл сигналов, который автоматически создает экземпляр Invoice всякий раз, когда создается новый экземпляр ShippingAddress .

Моя проблема в том, что я не могу напрямую добавить новый Invoice экземпляр, используя имя строки, а не идентификатор ForeignKey, без получения ошибки

"shipping_address": ["Неверный тип. Ожидаемое значение pk, полученная строка." ]

Как мне go использовать строковое имя поля shipping_address из таблицы Invoice при сохранении связи между двумя таблицами.

Адрес доставки модель

class ShippingAddress(models.Model):

    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name="customer_ship_address")
    address = models.CharField(max_length=50, blank=True)
    zip_code = models.CharField(max_length=12, blank=True)

    def __str__(self):
        return self.customer.name

Счет-фактура модель

class Invoice(models.Model):

    shipping_address = models.ForeignKey(ShippingAddress, on_delete=models.CASCADE, related_name="ship_address_name")
    invoice_id = models.CharField(max_length=50, unique=True, default=increment_invoice_number)
    product = models.CharField(max_length=50, blank=True)
    date = models.DateField(default=datetime.date.today)

    def __str__(self):
        return self.shipping_address.name

сигнал файл

@receiver(post_save, sender=ShippingAddress)
def create_invoice(sender, instance, created, **kwargs):
    if created:
        Invoice.objects.create(shipping_address=instance)

views.py файл

class InvoiceListCreateView(ListCreateAPIView):

    serializer_class = InvoiceSerializer
    queryset = Invoice.objects.all().order_by('-date')
...