Сопоставление данных в модели Django с другой моделью

#python #django #sqlite

Вопрос:

У меня есть эта модель.

 class AuctionListings(models.Model):
    """
    Model for all the listings listed on the site.
    """
    title = models.CharField(max_length=40)
    description = models.TextField()
    image_url = models.URLField()
    current_bid = models.PositiveSmallIntegerField()
    category = models.CharField(choices=CATEGORIES, max_length=5)
    date = models.DateField(default=date.today)
    datetime = models.DateTimeField(default=timezone.now)
    date_last_updated = models.DateField(auto_now=True)
    date_added = models.DateField(auto_now_add=True)
    timestamp_last_updated = models.DateTimeField(auto_now=True)
    timestamp_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Title:{self.title}, Date Added:{self.date_added}, Category:{self.category}"

    class Meta:
        """
        Specifies the plural name of the model for the Django Admin Panel.
        """
        verbose_name_plural = "Auction Listings"
 

Я хочу иметь возможность устанавливать начальную ставку в списках аукционов, когда кто-то создает новый список. Точно так же, как это сделал бы eBay.
Я хочу, чтобы ставка также могла обновляться в модели ставок. И что если список будет удален, заявка на листинг также будет удалена. Потому что там нет списка. Я пробовал использовать внешний ключ, но потом я получаю это

Вы пытаетесь добавить ненулевое поле «current_bid» в аукционные списки без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк). Пожалуйста, выберите исправление:

  1. Теперь укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этого столбца).
  2. Выйдите и позвольте мне добавить значение по умолчанию в models.py

Это модель ставок, которую я хочу связать с моделью аукциона.

 class Bids(models.Model):
    """
    Model to allow one to place bids on listings.
    """
    bid_price = models.ForeignKey(AuctionListings, on_delete=models.CASCADE)
    bidder = models.ForeignKey(User, on_delete=models.CASCADE)
    listings = models.ManyToManyField(AuctionListings)
 

Я только начал изучать Django и действительно не знаю, где искать, поэтому буду благодарен за некоторую помощь и объяснение того, что именно нужно делать.

Комментарии:

1. Может ли один пользователь сделать одну ставку для нескольких объявлений? У вас там много разных полей. Имеет ли это смысл? А затем у вас есть еще одно поле ForeignKey bid_price , разве это не должно быть целочисленное поле? Кажется, что-то не так.

2. @Ene Paul Несколько объявлений могут быть выставлены одним и тем же человеком, вот почему я использую мужчину для многих. Я использую внешний ключ для цены предложения, потому что должна быть начальная цена, и она должна соответствовать заявкам, чтобы отражать эту цену. Хотя, похоже, это не может произойти.

3. Хорошо, но использование ManyToManyField подобного означает, что пользователь «делает ставки» на несколько объявлений именно с этим Bid . Например, если пользователь подал заявку на 3 объявления, должно быть 3 разных предложения, а не одна и та же заявка, поданная на 3 разных объявления.

4. Я думаю, вы хотите использовать ForeignKey там. Он обладает множеством функций. Например, в списке может быть несколько предложений, но нельзя отправлять одну и ту же заявку в несколько списков.

5. Я это осуществлю. Но есть ли у Django что-то вроде соединения с внешним ключом? Тогда я могу позволить bid_price быть внешним ключом, который присоединяется к текущему идентификатору.