返回

Django模型-如何建立多个外键关系

发布时间:2022-05-03 13:33:18 288
# django

我正在尝试创建一个模型,

一个人可以在多家公司担任多个角色。

就像一家公司可以将一个人分配给董事和MD角色一样,董事角色也可以分配给两个独立的个人。

一个人可以在多家公司担任多个角色,如公司MD和董事会;菲尔姆博士。

我有三个模型,商行,个人坚定的角色.

我怎样才能做到这一点?

模型.py

from django.db import models
from django.urls import reverse
from django.utils import timezone


class Firm(models.Model):
    name = models.CharField(blank=False, max_length=50, null=False)
    street_address = models.TextField(blank=False, max_length=100, null=False)
    country = models.CharField(blank=False, max_length=25, null=False)    
    state = models.CharField(blank=False, max_length=25, null=False)
    city = models.CharField(blank=False, max_length=25, null=False)
    pin_code = models.CharField(blank=False, max_length=25, null=False)
    contact = models.CharField(blank=False, max_length=15, null=False, unique=True)
    email = models.EmailField(blank=False, null=False, unique=True)
    pan = models.CharField(blank=True, max_length=25, null=True)
    cin = models.CharField(blank=True, max_length=17, null=True)
    gstin = models.CharField(blank=True, max_length=25, null=True)
    is_active = models.BooleanField(default=False)
    created_by = models.ForeignKey(to='user.User', on_delete=models.CASCADE, blank=False, null=False, related_name="customer_firm", related_query_name="customer_firms")
    date_of_creation = models.DateTimeField(blank=False, default=timezone.now, null=False)
    last_modified = models.DateTimeField(blank=False, default=timezone.now, null=False)
    company = models.ForeignKey(to='company.Company', on_delete=models.CASCADE, blank=True, null=True, related_name="company_company", related_query_name="company_companies")

    def __str__(self) :
        return self.email

    def get_absolute_url(self):
        return reverse('cust_firm_detail', kwargs={'pk': self.pk})

    class Meta:
        ordering = ['id']
    

class Individual(models.Model): 
    first_name = models.CharField(blank=False, max_length=25, null=False)
    last_name = models.CharField(blank=False, max_length=25, null=False)
    street_address = models.TextField(blank=False, max_length=100, null=False)
    country = models.CharField(blank=False, max_length=25, null=False)    
    state = models.CharField(blank=False, max_length=25, null=False)
    city = models.CharField(blank=False, max_length=25, null=False)
    pin_code = models.CharField(blank=False, max_length=25, null=False)
    contact = models.CharField(max_length=10, null=False, blank=False, unique=True)
    email = models.EmailField(blank=False, null=False, unique=True)
    password = models.CharField(blank=False, editable=False, max_length=256)
    pan = models.CharField(blank=True, max_length=25, null=True)
    aadhar_no = models.CharField(blank=True, max_length=16, null=True)
    is_active = models.BooleanField(default=False)
    created_by = models.ForeignKey(to='user.User', on_delete=models.CASCADE, blank=False, null=False, related_name="customer_individual", related_query_name="customer_individuals")
    date_of_creation = models.DateTimeField(blank=False, default=timezone.now, null=False)
    last_modified = models.DateTimeField(blank=False, default=timezone.now, null=False)
    company = models.ForeignKey(to='company.Company', on_delete=models.CASCADE, blank=True, null=True, related_name="company_individual", related_query_name="company_individuals")

    def __str__(self) :
        return self.email
  
    def get_absolute_url(self):
        return reverse('cust_individual_detail', kwargs={'pk': self.pk}) 

    class Meta:
        ordering = ['id']


class FirmRole(models.Model):
    name = models.CharField(blank=False, max_length=50, null=False)

    def __str__(self):
        return self.name


class IndividualFirmRole(models.Model):
    individual = models.ForeignKey(blank=False, related_name='individual_set', related_query_name='individual', to='Individual', on_delete=models.CASCADE, null=False)
    role = models.ForeignKey(blank=True, related_name='role_set', related_query_name='role', to='FirmRole', on_delete=models.CASCADE, null=True)
    firm = models.ForeignKey(blank=True, related_name='firm_set', related_query_name='firm', to='Firm', on_delete=models.CASCADE, null=True)

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像