Ho bisogno di impostare una relazione uno a uno che deve essere anche generica. Potrebbe essere tu puoi consigliarmi un design migliore. Finora mi è venuta ai seguenti modelliRelazione uno-a-uno generica in Django
class Event(models.Model):
# skip event related fields...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Meta:
unique_together = ('content_type', 'object_id')
class Action1(models.Model):
# skip action1 related fields...
events = generic.GenericRelation(Event, content_type_field='content_type', object_id_field='object_id')
@property
def event(self):
return self.events.get() # <<<<<< Is this reasonable?
class Action2(models.Model):...
In Django Admin nella lista degli eventi che voglio raccogliere tutte le azioni, e da lì che voglio andare a pagine di amministrazione per le azioni. È possibile evitare di creare la proprietà event
nei modelli di azione? C'è una soluzione migliore? Sarebbe bello combinare il campo events
e la proprietà event
in un'unica definizione. Il progetto con cui sto lavorando utilizza Django 1.1
Se si vuole veramente evitare 'eventi', è necessario implementare manualmente la query sulla tabella' Evento', come suggerito di seguito. Preferirei comunque avere 'events' come una GenericRelation e quindi usare' self.events.first() 'nella proprietà' event'. Inoltre, ciò consentirebbe più facilmente di rimuovere il vincolo univoco, in futuro. – alexcasalboni