Проблема с внесением изменений на сайте, размещенном на pythonanywhere

#django #git #django-models #pythonanywhere

#django #git #django-модели #pythonanywhere

Вопрос:

Я размещаю свой блог-сайт на pythonanywhere. У меня также есть поле модели для подписчиков в базе данных. Проблема в том, что всякий раз, когда я создаю новую запись локально и извлекаю ее в консоли pythonanywhere bash. Локальная база данных заменяет производственную базу данных. Что приводит к потере всех данных, предоставленных пользователями. Как остановить изменение некоторых полей при каждом запросе на извлечение?

 class Category(models.Model):
    created_on = models.DateTimeField(auto_now_add=True, verbose_name="Created on")
    updated_on = models.DateTimeField(auto_now=True, verbose_name="Updated on")
    title = models.CharField(max_length=255, verbose_name="Title")

    class Meta:
        verbose_name = "Category"
        verbose_name_plural = "Categories"
        ordering = ['title']

    def __str__(self):
        return self.title

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    image_file = models.ImageField(upload_to='media', null=True, blank=True)
    image_url = models.URLField(null=True)
    category = models.ForeignKey(Category, verbose_name="Category", on_delete=models.CASCADE, null=True)
    published_date = models.DateTimeField(blank=True, default=timezone.now ,null=True)

    class Meta:
        verbose_name = "Post"
        verbose_name_plural = "Posts"
        ordering = ('-published_date',)

    def get_absolute_url(self):
        return reverse("post_detail",kwargs={'pk':self.pk})

    def __str__(self):
        return self.title


class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    name = models.CharField(max_length=80)
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-created_on',)

    def __str__(self):
        return 'Comment {} by {}'.format(self.body, self.name)


class Subscribe(models.Model):
    email = models.EmailField()
    subscribed_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-subscribed_on',)

    def __str__(self):
        return 'Subscribed by {} on {}'.format(self.email, self.subscribed_on)
  

Ответ №1:

Похоже, что вы используете sqlite и что вы включили файл базы данных в git. Это означает, что каждый раз, когда вы фиксируете (либо на PythonAnywhere, либо локально), вы заменяете свою базу данных на ту, которую вы зафиксировали. Вы можете исключить свою базу данных из репозитория, добавив ее имя файла в свой .gitignore файл и удалив его из репозитория (с помощью git rm --staged ).

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

1. Я также думал об этом, но единственная проблема заключается в том, что некоторые статьи, которые я публикую, мне нравится сначала настраивать локально, а не публиковать их непосредственно на сервере. Статьи сохраняются в базе данных. Если я добавлю файл в .gitignore, у меня никогда не будет такой гибкости. Есть ли какой-либо способ .gitignore определенного класса модели?

2. База данных sqlite монолитна, поэтому вы не можете выбирать, какие биты являются постоянными, а какие нет. Возможно, вы могли бы разделить свою базу данных на 2 и использовать другую базу данных для некоторых моделей. В документах Django будут подробные сведения о том, как использовать 2 базы данных.

3. Большое тебе спасибо, Гленн. Это было действительно полезно.