Próbuję utworzyć system przesyłania wiadomości, w którym nadawca i odbiorcy wiadomości mogą być podmiotami ogólnymi. Wydaje się to w porządku dla nadawcy, w którym jest tylko obiekt do odniesienia (GenericForeignKey), ale nie mogę wymyślić, jak to zrobić dla odbiorców (GenericManyToManyKey?)Ogólna zależność wielu do wielu
Poniżej znajduje się uproszczony przykład. PersonClient i CompanyClient dziedziczą atrybuty od klienta, ale mają swoje własne szczegółowe dane. Ostatnia linia to punkt skupienia. W jaki sposób umożliwić odbiorcy wiadomość będzie zbiorem CompanyClients i PersonClients
class Client(models.Model):
city = models.CharField(max_length=16)
class Meta:
abstract = True
class PersonClient(Client):
first_name = models.CharField(max_length=16)
last_name = models.CharField(max_length=16)
gender = models.CharField(max_length=1)
class CompanyClient(Client):
name = models.CharField(max_length=32)
tax_no = PositiveIntegerField()
class Message(models.Model):
msg_body = models.CharField(max_length=1024)
sender = models.ForeignKey(ContentType)
recipients = models.ManyToManyField(ContentType)
Wow. To świetne rozwiązanie. Niezbyt gadatliwy, ale w stopniu bardziej skomplikowanym niż Prairiedogg. Bardzo dziękuję –
W modelu 'Klient', nie rozumiem, dlaczego' MessageRecipient' jest w 'received_messages = generic.GenericRelation ("MessageRecipient", ...) '? Czy to musi być "Wiadomość"? – user3595632
@ user3595632 'received_messages' to relacja wiele do wielu między' Client' i 'Message'. Dlatego musi być na 'MessageRecipient', który jawnie modeluje tę relację, ponieważ nie ma" GenericManyToManyField ". Czy to ma sens? – elo80ka