簡體   English   中英

如何在Django模型中訪問外鍵值?

[英]How to access foreign key value in a django model?

我正在嘗試構建一個簡單的“隊列”應用程序,在該應用程序中,用戶可以在某個房間的隊列中用數字取票。

我在定義Ticket.number和Room.next_number_to_take之間的關系時遇到了一些問題。 創建票證時,Ticket.number的值應為Room.next_number_to_take,但是,如果不為該類指定初始化函數,我不知道如何用“ Django”語言定義它。

這是我失敗的嘗試(失敗了故障單的save方法):

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User


# Create your models here.
class Room(models.Model):
    name = models.CharField(max_length=100)
    room_master = models.ForeignKey(User, on_delete=models.CASCADE)
    current_visitor_number = models.BigIntegerField(default=0)
    next_number_to_take = models.BigIntegerField(default=0)

class Ticket(models.Model):
    request_date = models.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
    number = models.BigIntegerField(default=0)

    def save(self, *args, **kwargs):
        self.number = self.room.next_number_to_take
        self.room.next_number_to_take += 1
        super(Ticket, self).save(*args, **kwargs)

我以前嘗試過以下同樣失敗的方法:

class Ticket(models.Model):
    request_date = models.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
    number = room.next_number_to_take
    room.next_number_to_take += 1

我自己還沒有嘗試過此代碼。 我認為,當您更改“ Room模型的next_number ,不會保存該模型。 所以我添加了另一行。 看看它是否有效,如果有任何錯誤,請盡快與我聯系。

def save(self, *args, **kwargs):
    self.number = self.room.next_number_to_take
    self.room.next_number_to_take += 1 # this line is ok but you need to save it
    self.room.save() # this is the new line to add
    super(Ticket, self).save(*args, **kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM