2016-07-01 11 views
0

Ich entwickle django Web Service mit Python3.5 und Django1.9.Wenn Geschäftsdaten einschließlich Fremdschlüssel enthalten sind, treten Fehler in Django auf?

Ich definiere Modelle wie belows:

from django.db import models 
from django.utils import timezone 

class URLCategory(models.Model): 
    url = models.CharField(max_length=200, null=True) 

class Post(models.Model): 
    title = models.CharField(max_length=200) 
    content = models.TextField(null=True) 
    site = models.ForeignKey(URLCategory, null=True) # site 라는 요소(프로퍼티)는 URLCategories 라는 클래스(모델)을 외래키로(MANY-TO-ONE) 가리킨다”이다. 
    created_date = models.DateTimeField(blank=True, null=True) 
    crawl_date = models.DateTimeField(blank=True, null=True) 
    num_of_comments = models.PositiveSmallIntegerField(default=0, null=True) 

    def save(self): 
     self.crawl_date = timezone.now() 
     super().save() 

    def __str__(self): 
     return self.title 

Und wenn ich versuche, so etwas wie belows zu tun,

url_category = URLCategory("http://example.org") 
post = Post(title="Title", created_date="06/29/2016", site=url_category) 
post.save() 

Es Fehler tritt auf, bei post.save():

self = <django.db.models.fields.AutoField: id>, value = 'http://example.org' 

    def get_prep_value(self, value): 
     value = super(AutoField, self).get_prep_value(value) 
     if value is None: 
      return None 
>  return int(value) 
E  ValueError: invalid literal for int() with base 10: "http://example.org" 

../venv/lib/python3.5/site-packages/django/db/models/fields/__init__.py:976: ValueError 

Ich suche nach gleichen Problemen mit dem Stichwort invalid literal for int() with base 10 in stackoverflow, bu t kann dieses Problem nicht lösen.

Brauchen Sie Hilfe, danke.

Antwort

0

Es

url_category = URLCategory.objects.create(url="http://example.org") 
post = Post(title="Title", created_date="06/29/2016", site=url_category) 
post.save() 
+0

Ehrfürchtig Lösung sein sollte, es funktioniert! Vielen Dank. By the way, wenn ich versuche, mehrere Beiträge mit for-Schleife zu erstellen, die alle URL ist "http://example.org", doppelte URL erscheint im Abschnitt Kategorie auf der Admin-Seite. Ich möchte es nur einmal für die gleiche URL-Kategorie erscheinen lassen, irgendwelche Ideen? – user3595632

+0

ja ... mit 'get_or_create (url =" example.com ")' wird nur eine erstellt –