Я новичок в кодировании, и я перешел по ссылке http://charlesleifer.com/blog/self-referencing-many-many-through/, чтобы попытаться составить простой список друзей. У меня возникают проблемы при создании представления, которое позволяет пользователям добавлять или удалять контакты из HTML. Я думаю, что если мне удастся удалить идентификатор этого отношения ManytoMany, я смогу удалить элемент в этом поле m2m, но просто не могу понять, как загрузить правильный идентификатор
Я пытался использовать .clear () и .delete (), но они будут удалять все отношения с пользователем, все, что я хочу сделать, это удалить одно конкретное отношение между двумя пользователями.
Вот моя пользовательская модель и контакт:
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255,unique=True)
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=25)
contacts = models.ManyToManyField('self', through='Contact', symmetrical=False, related_name='related_to+')
objects = UserManager()
USERNAME_FIELD = 'email'
def __str__(self):
return self.email
def add_contact(self, person, symm=True):
contact, created = Contact.objects.get_or_create(
from_person=self,
to_person=person,
)
if symm:
person.add_contact(self, False)
return contact
def remove_contact(self, person, symm=True):
Contact.objects.filter(
from_person=self,
to_person=person,).delete()
if symm:
person.remove_contact(self, False)
class Contact(models.Model):
current_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='owner', on_delete=models.CASCADE)
contact_name = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, related_name='contact_name', null = True)
Вот таблица внешнего интерфейса HTML, которую я использую для отображения каждого контакта, который есть у пользователя
<table id="datatables-basic" class="table table-lined" style="width:100%">
<span class="align-right" style="float:right">
<a href="#"><img src="{% static 'images/_ionicons_svg_md-add-circle-outline.svg' %}" alt="" style="width:3em;height: 3em;" data-toggle="modal" data-target="#addcontactModalCenter"></a>
</span>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% if user.contacts %}
{% for contact in user.contacts.all %}
<tr>
<td>{{ contact.first_name }} {{ contact.last_name }}</td>
<td>{{ contact.title}}</td>
<td>{{ contact.email }}</td>
<td>
<a href="#"><img src="{% static 'images/_ionicons_svg_md-trash.svg' %}" alt="" style="width:1.5em;height: 1.5em;" data-toggle="modal" data-target="#removecontactModalCenter"></a>
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
Когда пользователь нажимает на значок корзины, чтобы удалить контакт, я использую модальный режим, чтобы попросить пользователя подтвердить перед удалением этого контакта. После подтверждения удалите этого человека из списка контактов пользователя.
<div class="modal fade" id="removecontactModalCenter" tabindex="-1" role="dialog" aria-labelledby="removecontactModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-body">
<form action="{% url 'accounts:remove_contact' %}" method="POST">
{% csrf_token %}
<div class="modal-body">
<h5><strong>Remove from your contact?</strong></h5>
<input type="hidden" name="contact_id" value="{{ Contact.id }}">
</div>
<div class="modal-footer">
<input type="submit" class="btn btn-primary" value="Yes, Remove">
<input type="submit" class="btn btn-secondary" data-dismiss="modal" value= "Close">
</div>
</form>
</div>
</div>
</div>
</div>
Однако я застрял в части просмотра, я не могу понять, как вызвать правильный соответствующий идентификатор контакта в таблице и удалить его из списка контактов пользователя:
def remove_contact(request):
if request.method == 'POST':
contact = Contact.objects.get(Contact.id)
contact.delete()
return redirect('accounts:contacts')
Пожалуйста, помогите Спасибо!