저는 활동 모델을 가지고 있습니다. 활동 모델은 News 개체가 생성 될 때마다 활동 개체를 만듭니다. News 객체에는 태그가 있습니다.개체의 필드를 다른 개체의 필드로 복사하는 방법
class Tag(models.Model):
slug = models.SlugField()
class News(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=150)
tags = models.ManyToManyField(Tag)
activity = GenericRelation(Activity)
class Activity(models.Model):
actor_type = models.ForeignKey(ContentType, related_name='actor_type_activities')
actor_id = models.PositiveIntegerField()
...
...
target_type = models.ForeignKey(ContentType, related_name='target_type_activities')
target_id = models.PositiveIntegerField()
target = GenericForeignKey('target_type', 'target_id')
tags = models.ManyToManyField(Tag)
이제 신호를 사용하여, 나는이 방법으로 뉴스 객체의 태그를 얻는 시도,
@receiver(post_save, sender=News)
def create_activity(sender, **kwargs):
if kwargs.get('created', False):
actor_type = ContentType.objects.get_for_model(kwargs.get('instance').user)
actor_id = kwargs.get('instance').user.id
target_type = ContentType.objects.get_for_model(kwargs.get('instance'))
target_id = kwargs.get('instance').id
...
...
# this didn't work
tags = kwargs.get('instance').tags.all()
# even this didn't work
tags = target_type.get_object_for_this_type(id=target_id).tags.all()
activity = Activity.objects.get_or_create(
actor_type=actor_type,
actor_id=actor_id,
verb=verb,
target_type=target_type,
target_id=target_id,
tags=tags,
pub_date=pub_date
)
하지만 오류가 점점 오전 : 내가 뉴스 오브젝트의 복사하려면 어떻게
'tags' is an invalid keyword argument for this function
을 태그를 Activity 객체의 태그 목록에 추가 하시겠습니까?
안녕하세요. 나는 네 길로 바꿨다. 이제 오류가 발생하지 않습니다. 그러나 태그 오브젝트는 활동을 작성한 후에도 활동 오브젝트에 지정하지 않습니다. 'activity.tver.add (* tags)'다음에'activity.verb = "changed"를 추가하고'activity.save()'를 추가했다. 이것은 변화하고 있습니다. 그러나 태그는 activity.tags에 지정되지 않습니다. 내가 뭘 놓치고 있니? – Aamu
흠, 다른 버그가있을 수 있습니다. 나는 당신이 태그를 인쇄 해보고 그것들이 실제로 있는지 확인해야한다고 생각한다. 그런 다음 일괄 적으로 대신 하나씩 추가 할 수도 있습니다 (대량은 더 빠름). 따라서 activity.tags.add (* tags)를 "for t tags : activity.add (t)"로 대체하십시오. – steffens21
예. 당신 말이 맞아요. 나는 이것을'tags = activity.target.tags.all()'그리고 나서'activity.verb = "% s"% (tags.first())'로했다. 하지만 첫 번째 태그를 얻는 대신에, 내가 얻은 동사는 '없음'입니다. – Aamu