2017-09-13 3 views
1

Ich habe einen Fehler bekommen, AttributeError: 'DeferredAttribute' Objekt hat kein Attribut 'Objekte'. Ich möchte analysieren Excel und legte es auf das Modell (Stadt & Präfektur & Bereich & Benutzer). Ich schriebAttributeError: 'DeferredAttribute' Objekt hat kein Attribut 'Objekte'

user3 = User.objects.filter(corporation_id=val3).first() 
if user3: 
    area = Area.objects.filter(name="America").first() 
    pref = Prefecture.objects.create(name="prefecture", area=user3.area) 
    city = City.objects.create(name="city", prefecture=pref) 
    price_u1000 = Price.upper1000.objects.get(city=city) 
    price_500_1000 = Price.from500to1000.objects.get(city=city) 
    price_u500 = Price.under500.objects.get(city=city) 

    pref.name = "NY" 
    pref.save() 

    for i in range(2,len(fourrows_transpose)): 
     city.name = fourrows_transpose[i][1] 
     city.save() 
     print(fourrows_transpose[i][1]) 

     price_u1000.name = fourrows_transpose[i][2] 
     price_u1000.save() 
     print(fourrows_transpose[i][2]) 

     price_500_1000.name = fourrows_transpose[i][3] 
     price_500_1000.save() 
     print(fourrows_transpose[i][3]) 

     price_u500.name = fourrows_transpose[i][4] 
     price_u500.save() 
     print(fourrows_transpose[i][4]) 

Traceback sagt diesen Code price_u1000 = Price.upper700.objects.get(city=city) ist falsch. models.py ist

class Area(models.Model): 
    name = models.CharField(max_length=20, verbose_name='area', null=True) 
class User(models.Model): 
    user_id = models.CharField(max_length=200,null=True) 
    area = models.ForeignKey('Area',null=True, blank=True) 

class Prefecture(models.Model): 
    name = models.CharField(max_length=20, verbose_name='prefecture') 
    area = models.ForeignKey('Area', null=True, blank=True) 

class City(models.Model): 
    name = models.CharField(max_length=20, verbose_name='city') 
    prefecture = models.ForeignKey('Prefecture', null=True, blank=True) 

class Price(models.Model): 
    upper1000 = models.CharField(max_length=20, verbose_name='u1000', null=True) 
    from500to1000 = models.CharField(max_length=20, verbose_name='500~1000', null=True) 
    under500 = models.CharField(max_length=20, verbose_name='d500', null=True) 
    city = models.ForeignKey('City', null=True, blank=True) 

Was soll ich tun, um dieses Problem beheben? Wie soll ich es schreiben?

Antwort

2

Sein, weil oberes 1000 oder was auch immer Feld nicht die Attributgegenstände hat. Objekte sind in der Model-Klasse vorhanden.

Nun, wenn Opper1000, von500to1000 und von Under500 sich gegenseitig ausschließen, könnten Sie so etwas tun. Aber denken Sie daran, wenn dies der Fall ist, sollten Sie die gegenseitige Exklusivität in der Modellreinigungsfunktion behandeln.

price_u1000 = Price.objects.filter(city=city, upper1000__isnull=False, from500to1000__isnull=True, under500__isnull=True) 

Ich würde empfehlen, ein Auswahlfeld anstelle von 3 verschiedenen Bereichen zu schaffen, die sich gegenseitig ausschließende

class Price(models.Model): 

    UNDER_500 = 'under 500' 
    FROM_500_TO_1000 = 'from 500 to 1000' 
    UPPER_1000 = 'upper 1000' 

    PRICE_CHOICES = [ 
     (UNDER_500, pgettext_lazy('Price under 500')), 
     (FROM_500_TO_1000, pgettext_lazy('Price from 500 to 1000')), 
     (UPPER_1000, pgettext_lazy('Price above 1000')) 
    ] 

    price_range = models.CharField(
     verbose_name=ugettext_lazy('Price range'), 
     max_length=25, 
     choices=PRICE_CHOICES, 
     default=UNDER_500 
    ) 

    city = models.ForeignKey('City', null=True, blank=True) 

    def clean(self): 
     super(Price, self).clean() 
     # implement extra constraints here. 

Einige Lesungen zu sein scheint: https://docs.djangoproject.com/en/1.11/ref/models/querysets/

+0

thx ur comments.I nicht wollen exklusiv von 500 bis 1000 und unter 500 wenn oberes 1000. Ich möchte dieses Modell auf Daten setzen. – user8563636

+0

Ok, aber der erste Satz erklärt Ihr Problem, und die erste Abfrage ist, wie Sie Daten aus dem Modell abfragen sollten. Denken Sie daran, den Filter zu verwenden, wenn Sie solche Daten abfragen, da in keinem Ihrer Felder außer ID/PK ein eindeutiges = True vorhanden ist. Daher müssen Sie erwarten, dass mehr als eine Zeile von Ihrer Abfrage zurückgegeben wird. – Eska

Verwandte Themen