core / models.py
from django.db import models
from django.db.models.signals import post_save
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
middle_name = models.CharField(max_length=30)
class Company(models.Model):
name = models.CharField(max_length=100)
class Entity(models.Model):
is_person = models.BooleanField(default=True)
person = models.ForeignKey(Person, on_delete=models.PROTECT, null=True)
company = models.ForeignKey(Company, on_delete=models.PROTECT, null=True)
name = models.CharField(max_length=30)
def __str__(self):
return self.name
@property
def title(self):
return self.name
class Meta:
verbose_name_plural = 'entities'
def post_save_person_receiver(sender, instance, created, *args, **kwargs):
if created:
entity, is_created = Entity.objects.get_or_create(is_person=True, person=instance, company=None, name=instance.last_name) # noqa
post_save.connect(post_save_person_receiver, sender=Person)
def post_save_company_receiver(sender, instance, created, *args, **kwargs):
if created:
entity, is_created = Entity.objects.get_or_create(is_person=False, person=None, company=instance, name=instance.short_name) # noqa
post_save.connect(post_save_company_receiver, sender=Company)
class Group(models.Model):
name = models.CharField(max_length=20)
is_individual = models.BooleanField(default=True)
members = models.ManyToManyField(Entity, through='Membership')
class Membership(models.Model):
group = models.ForeignKey(Group, on_delete=models.PROTECT, null=False)
entity = models.ForeignKey(Entity, on_delete=models.PROTECT, null=False)
class Meta:
unique_together = ("entity", "group")
Für jede erstellte Firma und Person wird automatisch eine Entität erstellt, wobei Entity.is_person = True ist, wenn es sich um eine Person handelt. Eine Entität kann dann über eine ManyToMany-Beziehung im Mitgliedschaftsmodell Mitglied einer Gruppe wie "Mitarbeiter", "Lieferant" und "Kunde" werden.
Wie filtere ich Membership.entity in der Admin-Ansicht (zum Hinzufügen und Aktualisieren) so, dass bei der ausgewählten Gruppe "is_individual = True" (z. B. "Employee") im Entity-Feld nur "is_person = True" -Personen in der Entity-Combobox angezeigt werden?
Ich würde in Betracht ziehen, Ihre eigene Ansicht dazu zu schreiben. Meiner Meinung nach ist Djangos admin keine gute Seite, um ein Frontend aufzubauen. Ich verwende es nur, um schnelle Änderungen vorzunehmen, bei denen die Validierung nicht so häufig durchgeführt werden muss, da die Benutzer des Administrators wissen sollten, was sie tun. Wenn Sie anfangen, reaktionsschnellere Inhalte hinzuzufügen, denke ich darüber nach, eine andere Ansicht zu verwenden und von vorne zu beginnen (oder ein Framework), aber dennoch eine andere Ansicht.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen