1

GeoIP を使用して緯度経度をフォームに直接挿入しようとしています。おそらくローカル ホストで開発モードにあり、IP アドレスを適切に解決できないため、問題が発生しています。

緯度経度が実際に決定され、フォーム(「google.com」)に設定されているかどうかを確認するためだけに、ダミーのIPアドレスを作成しようとしています。残念ながら、これはフォーム内の他の要素、特に author 属性が適切に保存されないという問題を引き起こしています。

結果のエラー:

'NoneType' object has no attribute 'author'

これはビューです:

from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import RequestContext
from django.core.urlresolvers import reverse
from myapp.report.models import Story, UserProfile
from myapp.report.forms import ProfileForm, StoryForm
from django.contrib.auth.decorators import login_required
from django.contrib.gis.utils import GeoIP
from django.conf import settings

@login_required
def submit_story(request):
    remote_address = request.META['REMOTE_ADDR']
    if settings.DEBUG:
        remote_address = 'google.com'

    if request.method =="POST":
        story_form = StoryForm(request.POST, request.FILES)
        if story_form.is_valid():
            new_story = story_form.save(ip_address=remote_address)
            new_story.author = request.user
            new_story.save()
            return HttpResponseRedirect("/report/all/")
    else: # GET request
        story_form = StoryForm()
    return render_to_response("report/report.html", {'form': story_form}, context_instance=RequestContext(request))

これはモデルです:

class Story(models.Model):
    objects = StoryManager()
    title = models.CharField(max_length=100)
    topic = models.CharField(max_length=50)
    copy = models.TextField()
    author = models.ForeignKey(User, related_name="stories")
    zip_code = models.CharField(max_length=10)
    latitude = models.FloatField(blank=False, null=False)
    longitude = models.FloatField(blank=False, null=False)
    date = models.DateTimeField(auto_now=True, auto_now_add=True)
    pic = models.ImageField(upload_to='pictures', blank=True)
    caption = models.CharField(max_length=100, blank=True)

    def __unicode__(self):
        return " %s" % (self.title)

これは次の形式です。

from django import forms
from myapp.report.models import UserProfile, Story
from django.contrib.gis.utils import GeoIP

class ProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile

class StoryForm(forms.ModelForm):
    class Meta:
        model = Story
        exclude = ('author','latitude', 'longitude')

    def save(self, ip_address, *args, **kwargs):
        g = GeoIP()
        lat, lon = g.lat_lon(ip_address)
        user_location = super(StoryForm, self).save(commit=False)
        user_location.latitude = lat
        user_location.longitude = lon
        user_location.save(*args, **kwargs)
4

0 に答える 0