GOOGLE ADS

sábado, 30 de abril de 2022

cómo recopilar el pk del modelo que está viendo actualmente (django)

oye estoy tratando de hacer un proyecto de preguntas y respuestas para django, como obtengo el pk de la pregunta que estoy viendo ahora mismo para enviar una respuesta? Ya lo configuré para que la URL de la respuesta tenga /respuesta/pk de la pregunta, pero no sé cómo obtener esa información para que el código sepa dónde publicar el modelo, ¿cómo hago eso? también aquí está mi código, gracias!

puntos de vista:

class AnswerForm(SuccessMessageMixin, CreateView):
template_name = 'forum/answer-question.html'
model = Answer
form_class = AnswerForm
success_message = 'Success!'

def form_valid(self, form, pk=None):
form.instance.question_id = Question.objects.only('id')
form.instance.user = self.request.user
form.save()
return super().form_valid(form)

formas:

class AnswerForm(ModelForm):
class Meta:
model = Answer
fields = ['detail']
exclude = ('user', 'add_time')

direcciones URL:

desde django.urls ruta de importación desde. importar vistas

urlpatterns = [
path('questions/', views.QuestionsView.as_view(), name='questions'),
path('ask/', views.AskForm.as_view(), name='ask'),
path('answer/', views.AnswerForm.as_view(), name='answer'),
path('answer/<pk>', views.AnswerForm.as_view(), name='answer_with_pk'),
path('question/<pk>', views.QuestionDetailView.as_view(), name='detail'),
path('save-text', views.WriteCommentAnswerView.as_view(), name='save-text'),
path('save-vote', views.SaveVoteView.as_view(), name='save-vote'),
]

modelos:

class Answer(VoteModel, models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
detail = models.TextField()
add_time = models.DateTimeField(auto_now_add=True)

def get_absolute_url(self):
return f"/questions/"
def __str__(self):
return self.detail


Solución del problema

En AnswerForm, obtiene todos los parámetros de URL agregados a sí mismo debido a la vista detallada de la clase base. En su caso, "self.pk". Luego puede agregar cualquier cosa al contexto para la representación html implementando get_context_data:

def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in the publisher
context['question_pk'] = self.pk
return context

Consulte https://docs.djangoproject.com/en/4.0/topics/class-based-views/generic-display/

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...