Как создавать новые строки postgreSQL для сохранения данных каждый раз, когда вы запускаете свой код django

У меня есть сомнения, теперь, когда я выполняю свой сценарий, я могу сохранить его подряд

У моего models.py есть 2 таблицы (или класс) Страница и Категория

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)

    def __unicode__(self):
        return self.name

class Page(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=128)
    url = models.URLField()
    views = models.IntegerField(default=0)
    price = models.IntegerField(default=0)



    def __unicode__(self):

вернуть self.title

Этот код отрывок из моего views.py


Category.objects.all()
f = Category()
Page.objects.all()
p = Page()
p.category = f

x = India(symb)

f.name = x['Company Name']
f.save()


p.category = f
p.title = symb
p.price = float(x['Price'])
p.save()

когда я выполняю его снова или каждый раз, он перезаписывает ту же строку, что имеет смысл, как я ее использовал.

Как мне создавать новую строку каждый раз, когда я запускаю свой скрипт, чтобы я мог сохранить новые данные в новой строке вместо перезаписи той же самой строки

Я думал об использовании Python 'random', чтобы выбрать случайную букву из списка (например, g) каждый раз, когда я запускаю скрипт, затем присоединяюсь к нему, чтобы получить что-то вроде 'g.price', но тогда это ограничение составляет 26 букв, случайных, но не можно генерировать уникальные одинаковые буквы (хотя я могу сделать проверку "если").

Есть ли простой и правильный способ сделать это?

2 ответа

Решение

Models.py:-

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)

    def __unicode__(self):
        return self.name

class Page(models.Model):
    name = models.ForeignKey(Category)
    title = models.CharField(max_length=128)
    url = models.URLField()
    views = models.IntegerField(default=0)
    price = models.IntegerField(default=0)



    def __unicode__(self):

views.py:-

Если вы хотите обновить страницу определенной категории, следуйте этому: -

a = Category.objects.get(name=nameField) #Fetch reference object for which category name you want to add page

x = India(symb)

b = Page.objects.filter(name=a).update(title=symb,price = float(x['Price']))

Если вы хотите добавить новую категорию и страницу, выполните следующие действия: -

x = India(symb)

a = Category.objects.create(name = x['Company Name']) 

b = Page.objects.create(name=a,title=symb,price = float(x['Price']))

b.save()

Я не уверен, почему он не вставляет их по умолчанию, но вы можете заставить Django сделать это. Как следует из официальной документации:

В некоторых редких случаях необходимо иметь возможность принудительно заставить метод save() выполнить SQL INSERT и не отступать от выполнения UPDATE. Или наоборот: обновите, если это возможно, но не вставляйте новую строку. В этих случаях вы можете передать параметры force_insert=True или force_update=True методу save(). Очевидно, что передача обоих параметров является ошибкой: вы не можете одновременно вставлять и обновлять!

https://docs.djangoproject.com/en/1.10/ref/models/instances/

Другие вопросы по тегам