2016-12-12 3 views
0

Ich versuche, Attribut zu Beziehung hinzuzufügen.Django - Mehrere Benutzer vergeben unterschiedliche Namen für das gleiche Objekt

Ich habe ein Modell Scheduler, Product und User.

Es gibt mehrere Scheduler Objekte in der Datenbank. Jeder kann mehrere Produkte haben. Und jedes Produkt hat einige dieser Scheduler.

Der Benutzer kann wählen, welcher Scheduler mit einem Produkt verwendet werden soll.

Ich möchte Benutzer diesen Scheduler benennen können (beachten Sie, dass ein Scheduler von vielen Produkten von mehreren Benutzern verwendet werden kann).

Anwendungsfall:

Benutzer ein Produkt erzeugt und aus erlaubt Disponenten wählen. Wenn sie den Scheduler wählen, können sie diesem Scheduler einen Namen geben.

Für benutzer1, der Scheduler mit id=5name='My scheduler - everyday'

Für benutzer2 hat, den gleichen Scheduler (id=5) hat name='Everyday schedule'

class Product(models.Model): 

    user = models.ForeignKey(User, null=False, blank=False) 

    scheduler = models.ForeignKey('Scheduler', null=True, blank=True, related_name='products') 

class Scheduler(models.Model): 
    weekhours = models.ManyToManyField('WeekHour', related_name='schedulers') 
    identificator = models.TextField(null=True,blank=True) 

Ist es möglich, in ein paar einfachen Art und Weise zu tun, dass?

+0

Warum nicht Felder Namen und Typ zum Scheduler hinzufügen? Dann wird der Benutzer den Typ des Schedulers auswählen und auch den Namen dafür angeben. –

+0

Wenn ein Benutzer1 einen Namen für den Scheduler angibt, wirkt sich dies auch auf andere Benutzer aus. –

+0

Stellen Sie sicher, dass Sie dies als Gelöst markieren –

Antwort

1

Was Sie tun können, ist ein anderes Modell, das Users zu Schedulers mappt, und dort ein name Attribut haben. Dieses Modell würde user_id, scheduler_id und scheduler_name als Attribute haben.

Andernfalls können Sie das im Modell tun, und zeigen Sie auf die gewünschte Scheduler indirekt.

+1

Beachten Sie, dass Sie hier eine Viele-zu-Viele-Beziehung mit zusätzlichen Attributen im Durchgangsmodell beschreiben. –

0

Ich habe etwas vorgeschlagen, ähnlich wie

SCHEDULER_TYPE = (
    (1, _('Type1')), 
    (2, _('Type2')), 

) 

class Scheduler(models.Model): 

    weekhours = models.ManyToManyField('WeekHour', related_name='schedulers') 

    name = models.CharField(max_length=200, verbose_name=_('scheduler name')) 

    type = models.PositiveIntegerField(_('scheduler type'), choices=SCHEDULER_TYPE, default=1) 

Die Art des Abwicklers wird in SCHEDULER_TYPE gespeichert und nicht afftected werden, wenn der Benutzer den Namen der Instanz Scheduler ändern.

Auch wenn Sie mehr Daten benötigen, können Sie SchedulerCatergory trennen und weitere Kategoriefeld in Scheduler hinzufügen:

category = models.ForeignKey(SchedulerCategory, blank=True, null=True) 

In meinem undestanding, wenn der Benutzer den Typ des Scheduler wählt, erstellt er neue Scheduler Instanz von bestimmten Typs. Diese Scheduler-Instanz ist eindeutig und wird von anderen Benutzern nicht beeinflusst. Es bedeutet auch, dass Sie einfach jeden Namen darin speichern können.

In Ihren Worten:

Benutzer erstellt ein Produkt und wählen Sie aus erlaubt Disponenten. Wenn sie den Scheduler wählen, können sie diesem Scheduler einen Namen geben.

In meinem opinon: Nutzer ein Produkt erstellen und nicht aus erlaubt Disponenten Instanzen wählen aber aus scheduler_types oder scheduler_categories. Dann wird eine neue Instanz von Scheduler erstellt, in der Sie den Namen speichern können.

Verwandte Themen