Как я могу получить идентификатор от одной модели и передать его другой? Django - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть две модели, подобные этой:

class Entity(models.Model):
contact = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
company_name = models.CharField(max_length=40, blank=False, null=True)
vat_registration = models.CharField(max_length=12, blank=False, null=True)
street_number = models.CharField(max_length=10, blank=False, null=True)
street_name = models.CharField(max_length=100, blank=False, null=True)
post_code = models.CharField(max_length=10, blank=False, null=True)
city = models.CharField(max_length=40, blank=False, null=True)
country = models.CharField(max_length=60, blank=False, null=True)
email = models.EmailField(max_length=240, blank=False, null=True)

class Invoices(models.Model):
invoice_number = models.CharField(max_length=12, blank=False, null=True)
invoice_date = models.DateField()
invoice_code = models.CharField(max_length=10, blank=False, null=True)
client_ref = models.CharField(max_length=10, blank=False, null=True)
supplier = models.ForeignKey(Suppliers, default=None, on_delete=models.CASCADE)
net_amount = models.FloatField()
vat_paid = models.FloatField()
vat_reclaimed = models.FloatField()
invoice_type = models.CharField(max_length=10, blank=False, null=True) 
entity_name = models.ForeignKey(Entity, blank=True, null=True, default=None, on_delete=models.CASCADE)

У меня есть страница, на которой я вводю некоторые данные из счетов-фактур, и я хотел бы связать счет, который вводится с компанией, которой он принадлежит ,

Ниже мое (не работает views.py):

def claim_details(request):                                         #save the invoice onto DB
form = forms.SaveInvoice(request.POST)
if request.method == 'POST':
    if form.is_valid():
        instance = form.save(commit=False)
        inv = Entity.objects.values_list('id', flat=True)
        instance.entity_name = inv[0]
        print(instance)
        instance.save()
        return redirect('accounts:claim')
else:
    form = forms.SaveInvoice()
args = {'form': form}
return render(request, 'dashboard/claim_details.html', args)

Я пытаюсь включить идентификатор из сущности в сохраненный счет-фактуру.

Есть идеи?

Мне нужно добавить, что я вижу поле entity_name в панели администратора, но значение NULL. Мне бы хотелось, чтобы он был равен сущности, для которой я ввожу счета-фактуры.

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

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Поскольку entity_name является внешним ключом , вам не нужно беспокоиться о прямом назначении идентификатора записи - как уже упоминалось, Django сделает это за вас. Просто используйте это:

inv = Entity.objects.first()
instance.entity_name = inv
instance.save()

Кроме того, обратите внимание на две вещи:

  • как сейчас, вы выбираете любую первую запись из таблицы Entity, и в основном все счета будут привязан к тому же Entite. Возможно, вы хотели отфильтровать это по пользователю: Entity.objects.filter(contact=request.user).first
  • entity_name установили on_delete аргумент в CASCADE. Это означает, что при удалении связанной Entity вы также потеряете инвойс. Возможно, вы хотите сохранить счета как исторические данные, независимо от того, удаляется ли связанная Entity.
0 голосов
/ 02 февраля 2020

Вы делаете правильно, но не совсем правильно. У вас уже есть поле в качестве внешнего ключа, поэтому вам не нужно беспокоиться о получении идентификатора. Просто получите весь объект Entity, к которому вы хотите привязать, и передайте его в entity_name, Django автоматически назначит идентификатор этому полю. Если вы хотите просмотреть идентификатор, используйте object.pk. ПК как в первичном ключе. Надеюсь, это поможет.

...