1

Ich habe ein Comment Modell, das ich seit dem News Modell:Django dynamisch einen Fremdschlüssel Beziehung Modell wählen

class Comment(models.Model): 
    news = models.ForeignKey(News, on_delete=models.CASCADE) 
    posted_by = models.ForeignKey(Student, on_delete=models.CASCADE) 
    content = models.TextField(max_length=2048) 
    posted_on = models.DateTimeField(auto_now_add=True) 
    edited = models.BooleanField(default=False) 
    last_edited_on = models.DateTimeField(auto_now=True) 


    def __str__(self): 
     return '{} - {}'.format(self.posted_by, self.news) 

Aber jetzt habe ich ein Materials Modell und ich möchte Kommentare zu dort haben, aber das gleiche Comments Modell zu verwenden. Gibt es eine Möglichkeit, die Fremdschlüsselbeziehung dynamisch zu wählen (news = models.ForeignKey(...) ->news_or_material = ... oder so ähnlich).

Natürlich kann ich ein separates Modell (MaterialComment) schreiben, aber ich möchte meinen Code wiederverwenden.

Da ist in meinem Viewset sollte ich so etwas tun (ich benutze Django REST Framework):

def create(self, request, news_pk=None): 
    news = get_object_or_404(News, id=news_pk) 
    context = {'request': request, 'news': news} 

    serializer = self.get_serializer_class()(
     context=context, data=request.data 
    ) 
    serializer.is_valid(raise_exception=True) 
    self.perform_create(serializer) 
    headers = self.get_success_headers(serializer.data) 

    return Response(
     serializer.validated_data, 
     status=status.HTTP_201_CREATED, 
     headers=headers 
    ) 

I news_pk Parameter aus der URL zu einem pk von News oder Material bzw. news_or_material = get_object_or_404(...)

+0

ist genau das, was [generische Beziehungen] (https://docs.djangoproject.com/en/1.10/ref/contrib/contenttypes/#generic-relations) sind für. –

Antwort

1
drehen müssen

Wenn Sie dies entwickeln. Dann wird es ratsam sein, GenericForeignKey von Django zur Verfügung gestellt. Diese

Generic Foreign Key Django

Verwandte Themen