Mam teraz wątpliwości, kiedy wykonuję mój skrypt, jestem w stanie uratować go z rzędu

My modele.py ma 2 tabele (lub klasa) i kategoria

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):

Zwrócić self.title.

Ten kod to snip z moich widoków.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()

Kiedy wykonuję go ponownie lub za każdym razem, nadpisuje ten sam rząd, który ma sens tak, jak go użyłem.

Myślałem o użyciu Pythona "Losowo", aby wybrać losową literę z listy (na przykład g) za każdym razem, gdy biegam skrypt, a następnie dołączyć, aby uzyskać coś takiego jak "G.Price", ale ma to ograniczenie 26 liter, przypadkowych, ale nie ma to ograniczenia 26 liter, ale nie Unikalne, więc można wygenerować takie same litery (choć mogę zrobić ", jeśli" sprawdź to).

Czy jest łatwy i właściwy sposób na to zrobić.?

1
JSjohn 15 luty 2017, 16:44

2 odpowiedzi

Najlepsza odpowiedź

Modele.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:-

Jeśli chcesz zaktualizować stronę poszczególnej kategorii, wykonaj następujące czynności: -

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']))

Jeśli chcesz dodać nową kategorię i stronę Obserwuj: -

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()
0
Piyush S. Wanare 17 luty 2017, 13:49

Nie jestem pewien, dlaczego domyślnie nie wkłada ich, ale możesz wymusić Django do tego. Jako oficjalna dokumentacja sugeruje:

W niektórych rzadkich okolicznościach konieczne jest, aby móc wymusić metodę Zapisz () do wykonania wkładki SQL i nie wrócić do wykonywania aktualizacji. Lub wice-versa: Aktualizuj, jeśli to możliwe, ale nie wstawić nowego wiersza. W tych przypadkach możesz przekazać Force_insert = True lub Force_update = prawdziwe parametry do metody Zapisz (). Oczywiście przejście obu parametrów jest błędem: nie można wstawić zarówno wkładania, jak i aktualizacji!

https://docs.djangoproject.com/en/1.10/ref/models/instances/#forcing-an-Insert-or-update.

0
George 15 luty 2017, 21:55