3

私はDjangoを初めて使用し、ModelFormsを使用してフォームを送信して新しいイベントを作成し、データベースに保存しようとしています。

Location、Event (location_id FK を持つ)、および EventSchedule (event_id FK として) の 3 つのテーブルに行を挿入しようとしています。

フォームを保存するメソッドは次のとおりです。呼び出されたときにエラーは返されませんが、新しい行はデータベースに挿入されません。

addNewEvent() (views.py 内)

def addNewEvent(self, event_form, location_form, event_sched_form, latitude, longitude):

    new_event = event_form.save(commit=False)
    new_location = location_form.save(commit=False)
    new_event_sched = event_sched_form.save(commit=False)
    # set any necessary values and save forms
    new_location.latitude = latitude
    new_location.longitude = longitude
    new_location.save()
    new_event.flagged = False
    new_event.location = new_location
    new_event.save()
    new_event_sched.event = new_event
    new_event_sched.save()

models.py

class Location(models.Model):
    name = models.CharField(max_length=200)
    #address = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    state_code = models.CharField(max_length=100)
    zip = models.CharField(max_length=100, blank=True)
    country = models.CharField(max_length=100)
    latitude = models.DecimalField(max_digits=9, decimal_places=6)
    longitude = models.DecimalField(max_digits=9, decimal_places=6)
    class Meta:
        db_table = 'location'

class Event(models.Model):
    CATEGORIES = (
        ('KID', 'Kids'),
        ('FAM', 'Family'),
        ('NIT', 'Nightlife'),
        ('OUT', 'Outdoors'),
        ('ART', 'Arts'),
        ('MSC', 'Music'),
        ('SPT', 'Sports'),
        ('SAL', 'Sale'),
        ('EDU', 'Educational'),
        ('POL', 'Political'),
        ('FOD', 'Food'),
        ('OTH', 'Other')
    )
    location = models.ForeignKey(Location)
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    category = models.CharField(max_length=20, choices=CATEGORIES)
    age_req = models.IntegerField(null=True)
    cost_per_person = models.DecimalField(max_digits=5, decimal_places=2, null=True)
    flagged = models.BooleanField()
    users = models.ManyToManyField(User, through='UserEvent')
    class Meta:
        db_table = 'event'

class EventSchedule(models.Model):
    event = models.ForeignKey(Event)
    start_date_time = models.DateTimeField()
    end_date_time = models.DateTimeField()
    class Meta:
        db_table = 'event_schedule'

フォーム.py

from django.forms import ModelForm、モデルからのフォーム import Event、Location、EventSchedule

class EventForm(ModelForm):
    class Meta:
        model = Event
        fields = ('name','description','category','age_req','cost_per_person')

class LocationForm(ModelForm):
    class Meta:
        model = Location
        fields = ('name','city','state_code','zip','country')

class EventScheduleForm(ModelForm):
    class Meta:
        model = EventSchedule
        fields = ('start_date_time', 'end_date_time')

どんな助けでも大歓迎です。

ありがとうございました、

ピーター

編集:

ModelForm は言うまでもなく、Model を保存することさえできません (他の場所で正常に実行しているにもかかわらず)。次のコードを追加して、ユーザーをイベントに関連付けました。エラーはありませんが、データベースに行を追加しません:

new_user_event = UserEvent(user=user,
                                event=new_event,
                                datetime_created=datetime.datetime.now())
new_user_event.save()

何か案は?

編集2:

new_user_event のスクリーンショット: http://imgur.com/JUauG

編集3:

これは、ModelForms をインスタンス化する方法です。

event_form = EventForm(request.POST or None)
location_form = LocationForm(request.POST or None)
event_sched_form = EventScheduleForm(request.POST or None)
4

3 に答える 3

29

うわー、私はとてもばかです。データベースにダミーデータを入力するコードが原因で、実際にイベントを表示する前に、テーブルの行を削除していました。

この質問を削除してもいいですか、それとも私の愚かさの証としてこの質問を続けるべきですか?

于 2012-07-01T02:23:28.040 に答える
1

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

commit=false原因です

于 2012-06-28T22:47:57.750 に答える
0

ここに最も重要な部分を投稿しませんでした IHMO : how are your forms instantiated ? ModelForm は、新しいインスタンスの作成と既存のインスタンスの更新の両方に使用できます。既存のインスタンスをフォームに渡すと、コードはそれらを更新するだけです。

于 2012-06-30T11:44:36.033 に答える