Creando relación entre dos aplicaciones en Django.

Tengo un post y una aplicación de categoría en mi proyecto django. Tengo autenticación de usuario y los usuarios pueden crear categorías y publicaciones. Estoy en un punto donde estoy sin ideas y la ayuda sería apreciada. Quiero que los usuarios puedan hacer referencia solo a su propia categoría y crear publicaciones en sus categorías y no en las de otras personas. Es decir, si un usuario crea más de una categoría, debería poder seleccionar de la lista de su categoría creada y no ver a otra persona.

modelo de categoría

class Category(models.Model): name = models.CharField(max_length = 120) slug = models.SlugField(unique= True) timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

modelo posterior

 class Post(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1,related_name='posts_created') #blank=True, null=True) title = models.CharField(max_length = 120) slug = models.SlugField(unique= True) category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category_created', null= True) 

Códigos de adición se proporcionarán inmediatamente a petición. Gracias

View.py en la aplicación posterior

 def create(request): if not request.user.is_authenticated(): messages.error(request, "Kindly confirm Your mail") #or raise Http404 form = PostForm(request.POST or None, request.FILES or None) user = request.user categories = Category.objects.filter(category_created__user=user).distinct() if form.is_valid(): instance = form.save(commit=False) instance.user = request.user instance.save() create_action(request.user, 'Posts', instance) messages.success(request, "Post created") return HttpResponseRedirect(instance.get_absolute_url()) context = { "form": form, "categories": categories, } template = 'create.html' return render(request,template,context) 

Formar

 class PostForm(forms.ModelForm): class Meta: model = Post fields = [ "title", "content", "category", ] 

html

 {% if form %} {% csrf_token %} {{ form|crispy|safe }}   {% endif %} 

Probablemente desee enumerar todas las categorías a las que un usuario ha contribuido en alguna vista.

Puede obtener todas las categorías a las que contribuyó un usuario de la siguiente manera:

 user = request.user # assuming you're in a view categories = Category.objects.filter(post__user=user).distinct() 
 category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category_created', null= True) 

related_name = ‘category_created’ significa que para acceder a su publicación desde una categoría necesita usar ‘category_created’:

 categories = Category.objects.filter(category_created__user=user).distinct() 

o puede cambiarle el nombre a related_name = ‘post’ y luego migrar.

Editar

View.py en la aplicación posterior

 def create(request): if not request.user.is_authenticated(): messages.error(request, "Kindly confirm Your mail") #or raise Http404 form = PostForm(request, request.POST or None, request.FILES or None, ) user = request.user if form.is_valid(): instance = form.save(commit=False) instance.user = request.user instance.save() create_action(request.user, 'Posts', instance) messages.success(request, "Post created") return HttpResponseRedirect(instance.get_absolute_url()) context = { "form": form, "categories": categories, } template = 'create.html' return render(request,template,context) 

forms.py

 class PostForm(forms.ModelForm): def __init__(self, request, *args, **kwargs): super (PostForm,self ).__init__(*args,**kwargs) # populates the post self.fields['category'].queryset = Category.objects.filter( category_created__user=request.user ).distinct()