Bir Kursu kaydetmek ve güncelleştirmek için özel bir CreateView (CourseCreate) ve UpdateView (CourseUpdate) kullanıyorum. Kurs kaydedildiğinde bir eylem yapmak istiyorum. Yeni kursun öğretim üyesi ve kullanıcı arasında çoktan çoğa yeni bir ilişki kuracağım (eğer mevcut değilse).Django CreateView: Kaydetme üzerine eylem gerçekleştirme
Bu nedenle, Kursu kurs olarak kaydetmek istiyorum ve daha sonra bu yeni ilişkiyi oluşturmak için course.faculty'yi kullanmak istiyorum. Bunun gerçekleşmesi için en iyi yer neresi?
Bu formda form_valid içinde yapmaya çalışıyorum, ancak form.instance.faculty kaynağına erişmeye çalışırken hata alıyorum (henüz CourseCreate içinde). Hata iletisi:
"Kurs: ..." bu çoktan çoğa ilişkinin kullanılabilmesi için önce "kurs" alanı için bir değere sahip olması gerekir.
Ayrıca, CourseUpdate'de çalışmıyor. Assist ilişkisi oluşturulmadı. Bunu formda denemeli miyim? Ancak, kullanıcı bilgilerini Form'a nasıl alacağımı bilmiyorum. Teşekkürler.
models.py
class Faculty(models.Model):
last_name = models.CharField(max_length=20)
class Course(models.Model):
class_title = models.CharField(max_length=120)
faculty = models.ManyToManyField(Faculty)
class UserProfile(models.Model):
user = models.OneToOneField(User)
faculty = models.ManyToManyField(Faculty, through='Assists')
class Assists(models.Model):
user = models.ForeignKey(UserProfile)
faculty = models.ForeignKey(Faculty)
views.py
class CourseCreate(CreateView):
model = Course
template_name = 'mcadb/course_form.html'
form_class = CourseForm
def form_valid(self, form):
my_course = form.instance
for f in my_course.faculty.all():
a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
return super(CourseCreate, self).form_valid(form)
class CourseUpdate(UpdateView):
model = Course
form_class = CourseForm
def form_valid(self, form):
my_course = form.instance
for f in my_course.faculty.all():
a, created = Assists.objects.get_or_create(user=self.request.user.userprofile, faculty=f)
return super(CourseUpdate, self).form_valid(form)
deneyin (False = işlemek) 'my_course = form.save ile' my_course = form.instance' yerine ' – Vingtoft
@Vingtoft, teşekkür ederim. Bunu denediğimde, btn'yi yeni bir kurs oluştururken Kaydet'i tıklattığımda hala aynı hatayı görüyorum: "Bu çoktan çoğa ilişkinin kullanılabilmesi için önce Kurs nesnesinin alan için bir değere sahip olması gerekir." "Tabii" bahsinin nereden geldiğini anlamıyorum ... Kurs isimli bir dersim var, ama "kurs" adlı bir alanı yok ve benim görüşümün hiçbirinin " elbette". – Carrie