2017-06-20 15 views
0

ModelFormとCreateViewを使用してdayplanの外部キーを持つ2番目の予定を追加しようとすると、DayPlanが 'date'フィールドはユニークです。Django形式intergrityerror:一意のフィールドを持つ外部キーが一意の制約に失敗する

この問題は、django-admin作成フォームでは表示されません。

私はdayplan.dateから何かが起こるのを見るためにunique = Trueを削除しようとしました。>予定を追加するたびに、dayplan.dateが存在していても、新しいdayplanが作成されます。

問題は、これらの2行に関連すると思わ:ここにある

daydate = DayPlan.objects.filter(date=planned_date) 
    form.cleaned_data['dayplan'] = daydate 

コード:

class DayPlan(models.Model): 
    date = models.DateField(unique=True, db_index=True) 
    comment = models.TextField(null=True, blank=True) 

    def __str__(self): 
     return 'Planning voor {}'.format(self.date) 

    def get_absolute_url(self): 
     return reverse('organizer_dayplan_detail', kwargs={'pk': self.pk}) 

class Appointment(models.Model): 
    comment = models.CharField(null=True, blank=True, max_length=255) 
    planned_date = models.DateField() 
    doctor = models.ForeignKey(Doctor) 
    visited = models.BooleanField(default=False) 
    dayplan = models.ForeignKey(DayPlan) 

class AppointCreate(CreateView): 
    model = Appointment 
    form_class = AppointmentForm 
    template_name = 'organizer/organizer_appointment_create.html' 
    # initial = {'doctor': 'pk', 'comment': 'test',} 
    def get_initial(self): 
     return { 
      "doctor": self.request.GET.get('doctor') 
     } 

    def form_valid(self, form): 
     planned_date = form.cleaned_data['planned_date'] 
     try: 
      daydate = DayPlan.objects.filter(date=planned_date) 
      form.cleaned_data['dayplan'] = daydate 
      form.instance.save() 


     except: 
      daydate = DayPlan.objects.create(date=planned_date) 
      form.instance.dayplan = daydate 
      form.instance.save() 
     return super(AppointCreate, self).form_valid(form) 

class AppointmentForm(forms.ModelForm): 
    class Meta: 
     model = Appointment 
     fields = {'comment', 'planned_date', 'doctor', 'visited', 'dayplan'} 
     widgets = {'visited': forms.HiddenInput(),} 
     exclude = {'dayplan',} 

P.S.私はここで "form.instance.save()"を使用する必要はないことを認識しています。それらを削除しても効果はありません。

ありがとうございます!

答えて

0

daydate, created = DayPlan.objects.get_or_create(date=planned_date) 
form.instance.dayplan = DayPlan.objects.get(date=planned_date) 
を解決
関連する問題