2015-12-17 11 views
5

Trợ giúp!Django: Tham chiếu giữa các mẫu

Tôi có 2 mô hình sau đây:

class Account(models.Model): 
    username = models.OneToOneField(User, primary_key=True, unique=True) 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    balance = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    def __str__(self): 
     return str(self.username) 


class Deposits(models.Model): 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    amount = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    user = ????????????????? 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    confirmed = models.BooleanField(default=False) 
    accounted = models.BooleanField(default=False) 

    def __str__(self): 
     return str(self.receiveaddress) 

Ví dụ: Visualization

Vấn đề của tôi:

Tôi muốn "Deposits.user" để tự động tham chiếu người dùng mà 'receiveaddress' này thuộc về. Trong ví dụ, đó là TIM. Tôi đã lãng phí 6 giờ cố gắng tìm ra nó, tôi đang làm gì sai?

Xin cảm ơn trước.

+0

Bạn có thể thử một cái gì đó như 'user = models.ForeignKey (Tài khoản)' – Pramod

+0

Cảm ơn! Nhưng điều này mang lại cho tôi tùy chọn để chọn bất kỳ người dùng nào trong tài khoản, trong trường hợp này -> Bob, Alice hoặc Tim. Tôi cần nó để chỉ hiển thị Tim. –

+0

thực sự điều này đại diện cho nhiều trường hợp, đối với mỗi tài khoản ở đó, tôi có nhiều doposits. Nhìn theo cách khác, có nhiều mối quan hệ giữa tiền gửi và tài khoản. – Pramod

Trả lời

3

Tôi nghĩ đó chỉ là vấn đề thiết kế. Tại sao bạn đặt hai lĩnh vực mà có những thông tin tương tự, kể từ khi user có tài khoản với receiveaddress, thêm người sử dụng như chìa khóa nước ngoài sẽ là đủ và rõ ràng hơn, tôi đề nghị như sau:

class Account(models.Model): 
    username = models.OneToOneField(User, primary_key=True, unique=True) 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    balance = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    def __str__(self): 
     return str(self.username) 


class Deposit(models.Model): 
    amount = models.DecimalField(max_digits=16, decimal_places=8, default=0) 
    user = models.ForeignKey(User, related_name="deposits") 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    confirmed = models.BooleanField(default=False) 
    accounted = models.BooleanField(default=False) 

    def __str__(self): 
     return str(self.user.account.receiveaddress) 

NB: Như một quy ước, tên mô hình phải luôn là số ít

+0

Đó chính xác là những gì tôi đang tìm kiếm! Cảm ơn bạn rất nhiều! –

Các vấn đề liên quan