Py学习  »  Django

如何?django模型字段,其值是同一模型的多个字段的选择

GonzaloN • 4 年前 • 614 次点击  

我有一个名为company的django模型,它有一个manytomy字段,其中添加了公司成员。

我有另一个领域,叫做“公司联系人”,我希望能够从其中一个公司成员中进行选择,就好像这是公司成员的万能钥匙一样。 没有定制表单、ajax请求、django autocomplete light等,有没有一种简单的方法可以做到这一点?

我打算用django admin填充这个模型。 谢谢

class Dm_Company(models.Model):
    company_name = models.CharField(max_length=80, blank=True, verbose_name="Razon Social")
    company_members = models.ManyToManyField(conf_settings.AUTH_USER_MODEL, verbose_name="Miembros")
    #company_contact = models.ForeignKey(conf_settings.AUTH_USER_MODEL, related_name="company_members", on_delete=models.CASCADE)
    company_phone = models.CharField(max_length=80, blank=True, verbose_name="Telefono compania")
    company_email = models.CharField(max_length=80, blank=True, verbose_name="Email compania")
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46938
 
614 次点击  
文章 [ 2 ]  |  最新文章 4 年前
rikAtee
Reply   •   1 楼
rikAtee    5 年前

没有办法过滤 company_contact 以你描述的方式提问。另一种方法是将以下内容添加到模型中:

def clean_fields(self, exclude=None):
    super().clean_fields(exclude=exclude)
    if not self.company_members.exists(id=self.company_contact_id):
        raise ValidationError('contact is not member')

这将阻止选择非成员的联系人

schillingt
Reply   •   2 楼
schillingt    5 年前

我能想到的一种方法是使用一个贯穿模型的manytomyne。

class Dm_Company(models.Model):
    company_name = models.CharField(max_length=80, blank=True, verbose_name="Razon Social")
    company_members = models.ManyToManyField(conf_settings.AUTH_USER_MODEL, through='CompanyMembership')
    ...

class CompanyMembership(models.Model):
    company = models.ForeignKey(Dm_Company)
    user = models.ForeignKey(conf_settings.AUTH_USER_MODEL)
    is_contact = models.BooleanField(default=False)

此模型的困难在于,您需要编写逻辑以防止将多个companymember设置为 is_contact 是的。但是,它确实会构造您的数据模型,使公司联系人无法引用其他公司中的用户。