Django 2 Ссылка нескольких пользователей в одну модель - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над проектом с использованием Python (3.7) и Django (2), в котором у меня есть несколько моделей, использующих модель User.У меня есть модель концерта. Пользователь может создать концерт, и этот пользователь может купить другой пользователь, поэтому я хочу построить модель для хранения информации о покупке, в которую я хочу включить Gig Model и userкоторый создал Gig как seller и user, который покупает концерт как buyer в модели.Как я могу создать такую ​​модель?

Вот моя Gig Модель:

class Gig(models.Model):
    CATEGORY_CHOICES = (
        ('GD', 'Graphic & Design'),
        ('DM', 'Digital Marketing'),
        ('WT', 'Writing & Translation'),
        ('VA', 'Video & Animation'),
        ('MA', 'Music & Audio'),
        ('PT', 'Programming & Tech'),
        ('FL', 'Fun & Lifestyle'),
    )

    title = models.CharField(max_length=500)
    category = models.CharField(max_length=255, choices=CATEGORY_CHOICES)
    description = models.CharField(max_length=1000)
    price = models.IntegerField(blank=False)
    photo = models.FileField(upload_to='gigs')
    status = models.BooleanField(default=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

И вот, чего я хочу добиться, например:

class Order(models.Model):
    gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
    seller = "I want to add the gig creator here"
    buyer = "I want to add thee gig buyer here"

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете просто сделать:

class Order(models.Model):
    gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
    seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sold_orders')
    buyer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='bought_orders')

PS Просто обратите внимание, что гораздо лучше использовать представление строковой модели в полях ForeightKey, чтобы избежать возможной проблемы кругового импорта.как:

gig = models.ForeignKey('Gig', on_delete=models.CASCADE)
0 голосов
/ 01 февраля 2019

Почему бы вам не использовать ForeignKey следующим образом:

class Order(models.Model):
    gig = models.ForeignKey(Gig, on_delete=models.CASCADE)
    seller = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="selling")
    buyer = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="buying")

Пожалуйста, убедитесь, что у каждой модели FK to User разные related_names, иначе они будут конфликтовать.

...