Django中级模型用户 [英] Django Intermediate Model User

查看:71
本文介绍了Django中级模型用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个模型,其中用户拥有多家公司的一定数量的股份.似乎我应该使用Django中间模型关系,但是我不确定如何将中间模型应用于内置的Django用户模型.

I'd like to create a model in which a user owns a certain number of shares in multiple companies. It seems like I should use the Django intermediate model relationship, but I'm not sure how to apply an intermediate model to the built-in Django User Model.

现在,公司与股东(用户)之间存在ManyToMany关系,如何在每个特定的公司-股东关系中增加股份数量?

Right now, companies have a ManyToMany relationship with shareholders (users), how do I add number of shares to each specific company-shareholder relationship?

class Company(models.Model):
    name = models.CharField(max_length=200)
    shareholder = models.ManyToManyField(User, blank=True)

推荐答案

这是我的处理方式:

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

class Shareholder(models.Model):
    name = models.CharField(max_length=128)
    user = models.OneToOneField(to=User, related_name='shareholder_profile')

    def __str__(self):
        return self.name

class Company(models.Model):
    name = models.CharField(max_length=128)
    shareholders = models.ManyToManyField(Shareholder, through='Shareholding')

    def __str__(self):
        return self.name

class Shareholding(models.Model):
    shareholder = models.ForeignKey(Shareholder, on_delete=models.CASCADE)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    date_shares_purchased = models.DateField()
    number_of_shares = models.PositiveIntegerField()

我将创建一个与用户具有一对一关系的股东模型,而不是直接使用用户模型.然后,我将使用持股中间模型在股东与公司之间建立多对多关系.

Instead of using the User model directly, I would create a Shareholder model with a one-to-one relationship with the User. Then I would create the many-to-many relationship between the Shareholders and Company with a Shareholding intermediate model.

查看全文

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆